目錄
- 1.使用Paramiko登陸到單臺交換機(jī)
- 2.使用Paramiko登陸到連續(xù)子網(wǎng)交換機(jī)
- 3.Paramiko登陸不連續(xù)子網(wǎng)交換機(jī)
- 4.sys.argv[ ] 實現(xiàn)靈活調(diào)用腳本所需文件
- 5.SSH連接失敗處理
1.使用Paramiko登陸到單臺交換機(jī)
實驗拓?fù)?/h3>
云彩橋接到本機(jī)環(huán)回接口:192.168.1.1/24
三層交換機(jī)IP:192.168.1.2/24
實驗要求
使用Python Paramiko 模塊實現(xiàn)SSH 登錄單個交換機(jī)(192.168.56.2/24),配置LoopBack0地址:1.1.1.1/32。配置完成后,保存退出。
實驗步驟 配置交換機(jī)管理地址,并測試與主機(jī)虛擬網(wǎng)卡連通性
[Huawei]vlan 10
[Huawei]int vlan 10
[Huawei-Vlanif10]ip add 192.168.1.2 24
[Huawei-GigabitEthernet0/0/1]port link-type access
[Huawei-GigabitEthernet0/0/1]port default vlan 10
配置三層交換機(jī)開啟 SSH 服務(wù)端,配置 SSH 賬號密碼。
[Huawei]user-interface vty 0 4
[Huawei-ui-vty0-4]authentication-mode aaa
[Huawei-ui-vty0-4]protocol inbound ssh
[Huawei-aaa]local-user python password cipher 123
[Huawei-aaa]local-user python privilege level 3
[Huawei-aaa]local-user python service-type ssh
[Huawei]stelnet server enable
[Huawei]ssh authentication-type default password
Python代碼
import paramiko
import time
ip = '192.168.56.2'
username = 'python'
password = '123'
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) //默認(rèn)情況下,Paramiko會拒絕任何未知的SSH public keys,使用此函數(shù)使其接收來自交換機(jī)提供的public keys。
ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)
print('Successfully connect to ' + ip)
commend = ssh_client.invoke_shell()
commend.send('sys\n')
commend.send('interface LoopBack 0\n')
commend.send('ip add 1.1.1.1 255.255.255.255\n')
commend.send('return\n')
commend.send('save\n')
commend.send('y\n')
time.sleep(3) //稍等3秒,然后執(zhí)行以下操作
output = commend.recv(65535) //截取本次運(yùn)行script后的所有輸出記錄,將其assign給output變量
print(output.decode("ascii"))
ssh_client.close()
查看運(yùn)行結(jié)果
在交換機(jī)上查看
也可以在交換機(jī)上debuggiing ip packet可以看到日志
2.使用Paramiko登陸到連續(xù)子網(wǎng)交換機(jī)
實驗拓?fù)?/h3>
連續(xù)子網(wǎng)三層交換機(jī):管理地址 192.168.1.2/24 to 192.168.1.5/24
實驗要求
登陸到各臺交換機(jī),并為其配置vlan 11 to 15,保存配置并退出。
實驗步驟
配置管理口IP地址,并配置SSH Server 登陸名以及密碼等
python代碼
import paramiko
import time
#import getpass
#username = input('Username: ')
#password = getpass.getpass('Password: ') //pycharm中該模塊運(yùn)行沒反應(yīng),用戶名和密碼還是直接寫的
username = 'python'
password = '123'
for i in range(2, 6):
ip = '192.168.1.' + str(i)
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)
command = ssh_client.invoke_shell()
print('Successfully connect to ' + ip)
command.send('sys\n')
for j in range(11, 16):
print('正在創(chuàng)建VLAN: ' + str(j))
command.send('vlan ' + str(j) + '\n')
time.sleep(1)
command.send('return\n')
command.send('save\n')
command.send('y\n')
time.sleep(2)
output = command.recv(65535).decode('ascii')
print(output)
ssh_client.close()
運(yùn)行結(jié)果
3.Paramiko登陸不連續(xù)子網(wǎng)交換機(jī)
實驗拓?fù)?/h3>
將交換機(jī)LSW5的管理接口ip更改為192.168.1.6/24,使交換機(jī)ip不在同一網(wǎng)段
實驗要求
使用Paramiko登陸四臺ip不連續(xù)的交換機(jī),并給其配置vlan11 to 15
實驗步驟
創(chuàng)建一個文本文檔,將需要配置的交換機(jī)的ip地址寫入,這里我在Desktop下創(chuàng)建了一個名為ip.txt文檔
使用open函數(shù),打開文件,進(jìn)行操作,實現(xiàn)不連續(xù)子網(wǎng)調(diào)用
import paramiko
import time
username = 'python'
password = '123'
f = open('C:/Users/DELL/Desktop/ip.txt', 'r')
for line in f.readlines():
ip = line.strip()
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=username, password=password)
print('Successfully connect to ', ip)
command = ssh_client.invoke_shell()
command.send('sys\n')
command.send('vlan batch 11 to 15\n')
time.sleep(2)
command.send('return\n')
command.send('save\n')
command.send('y\n')
time.sleep(2)
output = command.recv(65535).decode('ascii')
print(output)
f.close()
ssh_client.close()
查看運(yùn)行結(jié)果
4.sys.argv[ ] 實現(xiàn)靈活調(diào)用腳本所需文件
實驗拓?fù)?/h3>
假設(shè)1.2和1.3為一組,1.4和1.6為一組
實驗要求
同時修改不同型號設(shè)備的配置,給SW1/3配置vlan11 to 15,SW4/5配置vlan16 to 20
實驗步驟
創(chuàng)建兩個名為ip1.txt,command1.txt的文件,存儲1組的ip和要進(jìn)行的配置
同樣創(chuàng)建兩個名為ip2.txt,command2.txt文件,存儲2組的ip和要進(jìn)行的配置
python代碼
import paramiko
import time
import sys
username = 'python'
password = '123'
ip_file = sys.argv[1]
cmd_file = sys.argv[2]
iplist = open(ip_file)
for line in iplist.readlines():
ip = line.strip()
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=username, password=password)
print('Successfully connect to ', ip)
command = ssh_client.invoke_shell()
cmdlist = open(cmd_file, 'r')
cmdlist.seek(0)
for line in cmdlist.readlines():
command.send(line + '\n')
time.sleep(5)
cmdlist.close()
output = command.recv(65535)
print(output)
iplist.close()
ssh_client.close()
查看運(yùn)行結(jié)果(pycharm不可以使用argv,在cmd里使用)
5.SSH連接失敗處理
import paramiko
import time
import sys
import socket
import getpass
username = input('Username: ')
password = getpass.getpass('Password: ')
ip_file = sys.argv[1]
cmd_file = sys.argv[2]
switch_with_authentication_issue = []
switch_not_reachable = []
iplist = open(ip_file, 'r')
for line in iplist.readlines():
try:
ip = line.strip()
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=username, password=password,look_for_keys=False)
print('Successfully connect to ' + ip)
command = ssh_client.invoke_shell()
cmdlist = open(cmd_file, 'r')
cmdlist.seek(0)
for cmd in cmdlist.readlines():
command.send(cmd + '\n')
time.sleep(1)
cmdlist.close()
output = command.recv(65535)
print(output.decode("ascii"))
except paramiko.ssh_exception.AuthenticationException:
print('User authentication failed for ' + ip + '.')
switch_with_authentication_issue.append(ip)
except TimeoutError:
switch_not_reachable.append(ip)
iplist.close()
ssh_client.close()
print('\nUser authentication failed for below switches: ')
for i in switch_with_authentication_issue:
print(i)
print('\nBelow switchs are not reachable: ')
for i in switch_not_reachable:
print(i)
到此這篇關(guān)于Python實現(xiàn)網(wǎng)絡(luò)自動化eNSP的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python 網(wǎng)絡(luò)自動化 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Pytest+request+Allure實現(xiàn)接口自動化框架
- python開發(fā)的自動化運(yùn)維工具ansible詳解
- python實現(xiàn)自動化腳本編寫
- 教你怎么用Python處理excel實現(xiàn)自動化辦公
- python+requests+pytest接口自動化的實現(xiàn)示例
- python 自動化偷懶的四個實用操作
- 我用Python給班主任寫了一個自動閱卷腳本(附源碼)