国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何通過Telnet和SSH遠(yuǎn)程監(jiān)控主機(jī)

BothEyes1993 / 1525人閱讀

摘要:子程序執(zhí)行將在新進(jìn)程中完成。要在上執(zhí)行子程序,該類將使用該函數(shù)。如果是字符串,則字符串指定要通過執(zhí)行的命令。如果是任何其他負(fù)值,則表示完全緩沖。它用于通過網(wǎng)絡(luò)進(jìn)行系統(tǒng)管理和應(yīng)用程序部署。

來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯

愿碼Slogan | 連接每個(gè)程序員的故事

網(wǎng)站 | http://chaindesk.cn

愿碼愿景 | 打造全學(xué)科IT系統(tǒng)免費(fèi)課程,助力小白用戶、初級(jí)工程師0成本免費(fèi)系統(tǒng)學(xué)習(xí)、低成本進(jìn)階,幫助BAT一線資深工程師成長并利用自身優(yōu)勢創(chuàng)造睡后收入。

官方公眾號(hào) | 愿碼 | 愿碼服務(wù)號(hào) | 區(qū)塊鏈部落

免費(fèi)加入愿碼全思維工程師社群 | 任一公眾號(hào)回復(fù)“愿碼”兩個(gè)字獲取入群二維碼


本文閱讀時(shí)長:13min

在本文中,你將學(xué)習(xí)如何在配置了Telnet和SSH的服務(wù)器上執(zhí)行基本配置。我們將首先使用Telnet模塊,之后我們將使用首選方法實(shí)現(xiàn)相同的配置:使用Python中的不同模塊進(jìn)行SSH,了解如何telnetlib,subprocess,fabric,Netmiko,和paramiko模塊的工作。

telnetlib()模塊

在本節(jié)中,我們將了解Telnet協(xié)議,然后我們將通過遠(yuǎn)程服務(wù)器上的telnetlib模塊執(zhí)行Telnet操作。

Telnet是一種允許用戶與遠(yuǎn)程服務(wù)器通信的網(wǎng)絡(luò)協(xié)議。它主要由網(wǎng)絡(luò)管理員用于遠(yuǎn)程訪問和管理設(shè)備。要訪問設(shè)備,請(qǐng)使用終端中遠(yuǎn)程服務(wù)器的IP地址或主機(jī)名運(yùn)行Telnet命令。

Telnet在默認(rèn)端口號(hào)上使用TCP 23。要使用Telnet,請(qǐng)確保它已安裝在你的系統(tǒng)上。如果沒有,請(qǐng)運(yùn)行以下命令進(jìn)行安裝:

$ sudo apt-get install telnetd

要使用簡單的終端運(yùn)行Telnet,您只需輸入以下命令:

$ telnet ip_address_of_your_remote_server

Python具有telnetlib通過Python腳本執(zhí)行Telnet功能的模塊。在telnet遠(yuǎn)程設(shè)備或路由器之前,請(qǐng)確保它們已正確配置,如果沒有,則可以使用路由器終端中的以下命令進(jìn)行基本配置:

configure terminal
enable password "set_Your_password_to_access_router"
username "set_username" password "set_password_for_remote_access"
line vty 0 4 
login local 
transport input all 
interface f0/0 
ip add "set_ip_address_to_the_router" "put_subnet_mask"
no shut 
end 
show ip interface brief

現(xiàn)在,讓我們看一下Telnet遠(yuǎn)程設(shè)備的示例。為此,創(chuàng)建一個(gè)telnet_example.py腳本并在其中編寫以下內(nèi)容:

import telnetlib
import getpass
import sys
HOST_IP = "your host ip address"
host_user = input("Enter your telnet username: ")
password = getpass.getpass()

t = telnetlib.Telnet(HOST_IP)
t.read_until(b"Username:")
t.write(host_user.encode("ascii") + b"
")
if password:
t.read_until(b"Password:")
t.write(password.encode("ascii") + b"
")

t.write(b"enable
")
t.write(b"enter_remote_device_password
") #password of your remote device
t.write(b"conf t
")
t.write(b"int loop 1
")
t.write(b"ip add 10.1.1.1 255.255.255.255
")
t.write(b"int loop 2
")
t.write(b"ip add 20.2.2.2 255.255.255.255
")
t.write(b"end
")
t.write(b"exit
")
print(t.read_all().decode("ascii") )

運(yùn)行腳本,獲得如下輸出:

student@ubuntu:~$ python3 telnet_example.py
Output:
Enter your telnet username: student
Password:
server>enable
Password:
server#conf t
Enter configuration commands, one per line. End with CNTL/Z.
server(config)#int loop 1
server(config-if)#ip add 10.1.1.1 255.255.255.255
server(config-if)#int loop 23
server(config-if)#ip add 20.2.2.2 255.255.255.255
server(config-if)#end
server#exit

在前面的示例中,我們使用該telnetlib模塊訪問和配置了Cisco路由器。在此腳本中,首先,我們從用戶那里獲取用戶名和密碼,以初始化與遠(yuǎn)程設(shè)備的Telnet連接。建立連接后,我們?cè)谶h(yuǎn)程設(shè)備上進(jìn)行了進(jìn)一步配置。遠(yuǎn)程登錄后,我們將能夠訪問遠(yuǎn)程服務(wù)器或設(shè)備。但是這個(gè)Telnet協(xié)議有一個(gè)非常重要的缺點(diǎn),即所有數(shù)據(jù),包括用戶名和密碼,都是以文本方式通過網(wǎng)絡(luò)發(fā)送的,這可能會(huì)帶來安全風(fēng)險(xiǎn)。因此,如今Telnet很少被使用,并且被稱為Secure Shell的非常安全的協(xié)議所取代,稱為SSH。

通過在終端中運(yùn)行以下命令來安裝SSH:

$ sudo apt install ssh

此外,在用戶想要通信的遠(yuǎn)程服務(wù)器上,必須安裝并運(yùn)行SSH服務(wù)器。SSH使用TCP協(xié)議,22默認(rèn)使用端口號(hào)。

您可以ssh通過終端運(yùn)行 命令,如下所示:

$ ssh host_name@host_ip_address

現(xiàn)在來學(xué)習(xí)使用Python中的不同模塊來執(zhí)行SSH,例如subprocess,fabric,Netmiko和Paramiko。現(xiàn)在,我們將逐一看到這些模塊。

subprocess.Popen()模塊

此模塊的底層的進(jìn)程創(chuàng)建與管理由 Popen 類處理。它提供了很大的靈活性,因此開發(fā)者能夠處理未被便利函數(shù)覆蓋的不常見用例。子程序執(zhí)行將在新進(jìn)程中完成。要在Unix / Linux上執(zhí)行子程序,該類將使用該 os.execvp()函數(shù)。要在Windows中執(zhí)行子程序,該類將使用CreateProcess()函數(shù)。

現(xiàn)在,讓我們看一些有用的參數(shù)subprocess.Popen():

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None,
                                    stderr=None, preexec_fn=None, close_fds=False, shell=False,
                                    cwd=None, env=None, universal_newlines=False,
              startupinfo=None, creationflags=0)

讓我們看看每個(gè)論點(diǎn):

· args: 它可以是一系列程序參數(shù)或單個(gè)字符串。如果args是序列,則執(zhí)行args中的第一項(xiàng)。如果args是一個(gè)字符串,它建議將args作為序列傳遞。

· shell:shell參數(shù)默認(rèn)設(shè)置為False,它指定是否使用shell執(zhí)行程序。如果是shell True,則建議將args作為字符串傳遞。在 Linux中,如果shell=True,shell默認(rèn)為/bin/sh。如果args是字符串,則字符串指定要通過shell執(zhí)行的命令。

· bufsize:如果bufsize是0(默認(rèn)情況下是0),則表示無緩沖,如果bufsize是1,則表示行緩沖。如果bufsize是任何其他正值,請(qǐng)使用給定大小的緩沖區(qū)。如果bufsize是任何其他負(fù)值,則表示完全緩沖。

· executable:它指定要執(zhí)行的替換程序。

· stdin,, stdout和stderr:這些參數(shù)分別定義標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。

· preexec_fn: 這被設(shè)置為可調(diào)用對(duì)象,將在子進(jìn)程中執(zhí)行子進(jìn)程之前調(diào)用。

· close_fds: 在Linux中,如果close_fds是真的,所有的文件描述符,除了0,1和2執(zhí)行子進(jìn)程之前,將被關(guān)閉。在Windows中,如果close_fds是,true那么子進(jìn)程將繼承沒有句柄。

· env: 如果值不是None,則映射將為新進(jìn)程定義環(huán)境變量。

· universal_newlines: 如果該值True則stdout和stderr將被打開,在新行模式下的文本文件。

現(xiàn)在,我們將看到一個(gè)例子subprocess.Popen()。為此,創(chuàng)建一個(gè) ssh_using_sub.py 腳本并在其中寫入以下內(nèi)容:

import subprocess
import sys
HOST="your host username@host ip"
COMMAND= "ls"

ssh_obj = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)

result = ssh_obj.stdout.readlines()
if result == []:
err = ssh_obj.stderr.readlines()
print(sys.stderr, "ERROR: %s" % err)
else:
print(result)

運(yùn)行腳本,您將獲得如下輸出:

student@ubuntu:~$ python3 ssh_using_sub.py
Output :
student@192.168.0.106"s password:
[b"Desktop
", b"Documents
", b"Downloads
", b"examples.desktop
", b"Music
", b"Pictures
", b"Public
", b"sample.py
", b"spark
", b"spark-2.3.1-bin-hadoop2.7
", b"spark-2.3.1-bin-hadoop2.7.tgz
", b"ssh
", b"Templates
", b"test_folder
", b"test.txt
", b"Untitled1.ipynb
", b"Untitled.ipynb
", b"Videos
", b"work
"]

在前面的示例中,首先,我們導(dǎo)入了子進(jìn)程模塊,然后我們定義了要建立SSH連接的主機(jī)地址。之后,我們給出了一個(gè)通過遠(yuǎn)程設(shè)備執(zhí)行的簡單命令。完成所有這些后,我們將此信息放在 subprocess.Popen()函數(shù)中。此函數(shù)執(zhí)行該函數(shù)內(nèi)定義的參數(shù)以創(chuàng)建與遠(yuǎn)程設(shè)備的連接。建立SSH連接后,執(zhí)行我們定義的命令并提供結(jié)果。然后我們?cè)诮K端上打印SSH的結(jié)果,如輸出中所示。

SSH使用Fabric模塊

Fabric是一個(gè)Python庫,也是一個(gè)使用SSH的命令行工具。它用于通過網(wǎng)絡(luò)進(jìn)行系統(tǒng)管理和應(yīng)用程序部署。我們也可以通過SSH執(zhí)行shell命令。

要使用結(jié)構(gòu)模塊,首先必須使用以下命令安裝它:

$ pip3 install fabric3

現(xiàn)在,我們將看到一個(gè)例子。創(chuàng)建一個(gè) fabfile.py腳本并在其中寫入以下內(nèi)容:

from fabric.api import *
env.hosts=["host_name@host_ip"]
env.password="your password"

def dir():
    run("mkdir fabric")
    print("Directory named fabric has been created on your host network")
def diskspace():
    run("df")

運(yùn)行腳本,您將獲得如下輸出:

student@ubuntu:~$ fab dir
Output:
[student@192.168.0.106] Executing task "dir"
[student@192.168.0.106] run: mkdir fabric
 
Done.
Disconnecting from 192.168.0.106... done.

在前面的示例中,首先,我們導(dǎo)入了fabric.api模塊,然后設(shè)置主機(jī)名和密碼以與主機(jī)網(wǎng)絡(luò)連接。之后,我們?cè)O(shè)置了一個(gè)不同的任務(wù)來執(zhí)行SSH。因此,為了執(zhí)行我們的程序而不是Python3 fabfile.py,我們使用了fabutility(fab dir),之后我們聲明所需的任務(wù)應(yīng)該從我們的執(zhí)行fabfile.py。在我們的例子中,我們執(zhí)行了dir任務(wù),該任務(wù)"fabric"在遠(yuǎn)程網(wǎng)絡(luò)上創(chuàng)建了一個(gè)名稱目錄。您可以在Python文件中添加特定任務(wù)。它可以使用fab結(jié)構(gòu)模塊的實(shí)用程序執(zhí)行。

SSH使用Paramiko庫

Paramiko是一個(gè)實(shí)現(xiàn)SSHv2協(xié)議的庫,用于與遠(yuǎn)程設(shè)備的安全連接。Paramiko是一個(gè)圍繞SSH的純Python界面。

在使用Paramiko之前,請(qǐng)確保已在系統(tǒng)上正確安裝。如果未安裝,可以通過在終端中運(yùn)行以下命令來安裝它:

$ sudo pip3 install paramiko

現(xiàn)在,我們將看到一個(gè)使用示例paramiko。對(duì)于此paramiko連接,我們使用的是Cisco設(shè)備。Paramiko支持基于密碼和基于密鑰對(duì)的身份驗(yàn)證,以實(shí)現(xiàn)與服務(wù)器的安全連接。在我們的腳本中,我們使用基于密碼的身份驗(yàn)證,這意味著我們檢查密碼,如果可用,則使用普通用戶名/密碼身份驗(yàn)證嘗試進(jìn)行身份驗(yàn)證。在我們要對(duì)你的遠(yuǎn)程設(shè)備或多層路由器進(jìn)行SSH連接之前,請(qǐng)確保它們已正確配置,如果沒有,可以在多層路由器終端中使用以下命令進(jìn)行基本配置:

configure t
ip domain-name cciepython.com
crypto key generate rsa
How many bits in the modulus [512]: 1024
interface range f0/0 - 1
switchport mode access
switchport access vlan 1
no shut
int vlan 1
ip add "set_ip_address_to_the_router" "put_subnet_mask"
no shut
exit
enable password "set_Your_password_to_access_router"
username "set_username" password "set_password_for_remote_access"
username "username" privilege 15
line vty 0 4
login local
transport input all
end

現(xiàn)在,創(chuàng)建一個(gè)pmiko.py腳本并在其中編寫以下內(nèi)容:

import paramiko
import time
ip_address = "host_ip_address"
usr = "host_username"
pwd = "host_password"

c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect(hostname=ip_address,username=usr,password=pwd)

print("SSH connection is successfully established with ", ip_address)

rc = c.invoke_shell()
for n in range (2,6):
print("Creating VLAN " + str(n))
rc.send("vlan database
")
rc.send("vlan " + str(n) + "
")
rc.send("exit
")
time.sleep(0.5)

time.sleep(1)
output = rc.recv(65535)
print(output)
c.close

運(yùn)行腳本,您將獲得如下輸出:

student@ubuntu:~$ python3 pmiko.py
Output:
SSH connection is successfuly established with  192.168.0.70
Creating VLAN 2
Creating VLAN 3
Creating VLAN 4
Creating VLAN 5

在前面的示例中,首先,我們導(dǎo)入了paramiko模塊,然后我們定義了連接遠(yuǎn)程設(shè)備所需的SSH憑據(jù)。提供憑證后,我們創(chuàng)建一個(gè)實(shí)例"c"的paramiko.SSHclient(),它是用于與遠(yuǎn)程設(shè)備建立連接和執(zhí)行命令或操作主客戶端。創(chuàng)建SSHClient對(duì)象允許我們使用該.connect()函數(shù)建立遠(yuǎn)程連接。然后,我們?cè)O(shè)置策略paramiko連接,因?yàn)槟J(rèn)情況下, paramiko.SSHclient將SSH策略設(shè)置為拒絕策略狀態(tài)。這會(huì)導(dǎo)致策略在沒有任何驗(yàn)證的情況下拒絕任何SSH連接。在我們的腳本中,我們忽略了SSH連接丟失的可能性 AutoAddPolicy()在不提示的情況下自動(dòng)添加服務(wù)器主機(jī)密鑰的功能。我們可以將此策略用于測試目的,但出于安全目的,這在生產(chǎn)環(huán)境中不是一個(gè)好的選擇。

建立SSH連接后,你可以在設(shè)備上執(zhí)行所需的任何配置或操作。在這里,我們?cè)谶h(yuǎn)程設(shè)備上創(chuàng)建了一些虛擬LAN。創(chuàng)建VLAN后,我們只關(guān)閉了連接。

SSH使用Netmiko庫

在本節(jié)中,我們將了解Netmiko。Netmiko庫是Paramiko的高級(jí)版本。這是一個(gè)multi_vendor基于Paramiko 的圖書館。Netmiko簡化了與網(wǎng)絡(luò)設(shè)備的SSH連接,并對(duì)設(shè)備進(jìn)行了特殊操作。在對(duì)遠(yuǎn)程設(shè)備或多層路由器進(jìn)行SSH連接之前,請(qǐng)確保它們已正確配置,如果沒有,則可以通過Paramiko部分中提到的命令進(jìn)行基本配置。

現(xiàn)在,讓我們看一個(gè)例子。創(chuàng)建一個(gè) nmiko.py腳本并在其中編寫以下代碼:

from netmiko import ConnectHandler
remote_device={
"device_type": "cisco_ios",
"ip": "your remote_device ip address",
"username": "username",
"password": "password",
}

remote_connection = ConnectHandler(**remote_device)
#net_connect.find_prompt()

for n in range (2,6):
print("Creating VLAN " + str(n))
commands = ["exit","vlan database","vlan " + str(n), "exit"]
output = remote_connection.send_config_set(commands)
print(output)

command = remote_connection.send_command("show vlan-switch brief")
print(command)

運(yùn)行腳本,您將獲得如下輸出:

student@ubuntu:~$ python3 nmiko.py
Output:
Creating VLAN 2
config term
Enter configuration commands, one per line.  End with CNTL/Z.
server(config)#exit
server #vlan database
server (vlan)#vlan 2
VLAN 2 modified:
server (vlan)#exit
APPLY completed.
Exiting....
server #
..
..
..
..
switch#
Creating VLAN 5
config term
Enter configuration commands, one per line.  End with CNTL/Z.
server (config)#exit
server #vlan database
server (vlan)#vlan 5
VLAN 5 modified:
server (vlan)#exit
APPLY completed.
Exiting....
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/0, Fa0/1, Fa0/2, Fa0/3, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12, Fa0/13, Fa0/14, Fa0/15
2    VLAN0002                         active   
3    VLAN0003                         active   
4    VLAN0004                         active   
5    VLAN0005                         active   
1002 fddi-default                    active   
1003 token-ring-default         active   
1004 fddinet-default               active   
1005 trnet-default                    active

在前面的示例中,我們使用Netmiko庫來執(zhí)行SSH,而不是Paramiko。在這個(gè)腳本中,首先,我們ConnectHandler從Netmiko庫導(dǎo)入,我們通過傳入設(shè)備字典來建立與遠(yuǎn)程網(wǎng)絡(luò)設(shè)備的SSH連接。在我們的例子中,那個(gè)詞典是remote_device。建立連接后,我們執(zhí)行配置命令以使用該send_config_set()功能創(chuàng)建多個(gè)虛擬LAN 。

當(dāng)我們使用這種類型.send_config_set()的函數(shù)來傳遞遠(yuǎn)程設(shè)備上的命令時(shí),它會(huì)自動(dòng)將我們的設(shè)備設(shè)置為配置模式。發(fā)送配置命令后,我們還傳遞了一個(gè)簡單的命令來獲取有關(guān)已配置設(shè)備的信息。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43570.html

相關(guān)文章

  • 堡壘機(jī) 功能問題(授權(quán)賬戶) UAuditHost

    摘要:在堡壘機(jī)內(nèi)僅保存主機(jī)名稱和,不添加賬戶。管理員權(quán)限管理員權(quán)限雙人授權(quán)可以設(shè)置哪些人為授權(quán)人雙人授權(quán)可以設(shè)置哪些人為授權(quán)人雙人授權(quán)可以設(shè)置哪些人為授權(quán)人答工單設(shè)置可以設(shè)置本部門的部門管理員及上級(jí)管理員。 功能問題(授權(quán)和賬戶)本篇目錄1、僅授權(quán)主機(jī)和授權(quán)主機(jī)賬戶的區(qū)別?2、資源組是不是全局的,主要作用是?3、如何通過堡壘機(jī)中新建一個(gè)主機(jī)的SSH-Key賬戶,并在堡壘機(jī)中通過秘鑰登錄主機(jī)?4、為...

    ernest.wang 評(píng)論0 收藏3247

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<