原理:
将设备的配置文件,放到同目录下,然后将ip_add、username、passwd、path属性放入字典,写入device_info.py文件,并用datebase列表来接收字典。
在脚本中导入device_info库,最外层嵌套一个循环用来遍历datebase列表,用来实现对不同文件的遍历读取,然后在ssh连接时需要属性时,调用datebase中元素的键,从而实现对不同文件的读取。
代码不理解,可以去读上一篇文章,实际上就是将上篇文章中的固定变量,设置为灵活变量,以便调用不同文件
device_info.py:
# 需要一个数据库,存储着 各个设备的信息
dict_sw1 = {"ip_add": "192.168.19.10", "username": "zhangxiong", "passwd": "huawei@123", "path": "sw1.cfg"}
dict_sw2 = {"ip_add": "192.168.19.20", "username": "zhangxiong", "passwd": "huawei@123", "path": "sw2.cfg"}
dict_sw3 = {"ip_add": "192.168.100.30", "username": "zhangxiong", "passwd": "huawei@123", "path": "sw3.cfg"}
datebase = [dict_sw1, dict_sw2]
python代码实现:
import paramiko
import time
from device_info import *
for item in range(len(datebase)):
# 1.创建客户端对象
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 使用客户端,导入参数
ssh.connect(hostname=datebase[item]["ip_add"], username=datebase[item]["username"], password=datebase[item]["passwd"])
command = ssh.invoke_shell() # 创建一个命令对象 ,调用shell
with open(f'{datebase[item]["path"]}', 'r', encoding='utf-8') as f:
while True:
content = f.readline() # 将读取到的文件,按行,存储为一个列表
if not content:
break
command.send(content.encode())
print("please wait ....")
time.sleep(5) # 发送完命令,需要一个延时,等待设备 将回显值回传,等待时间不能太短
output = command.recv(65535) # 接收服务器的返回数据
print(output.decode()) # 将接收的数据解码
ssh.close()