本篇文章主要记录在学习过程中,使用paramiko小批量管理路由器交换机的练习,循序渐近的理解paramiko这个工具和代码运用。
实现登录多台交换机,获取设备的hostname,执行简单的查询交换机版本命令,并将查询信息保存到txt文件中。
一、脚本实现
二、脚本缺点
本篇内容均在华三模拟器上实现,脚本旨在学习,练习,不以最终使用为目的,因此尚存在以下问题
如果你所在实际场景设备单一,数量不多,要求不高的情况下,可以自行修改脚本并使用。
警告
如果你要用,请自行结合环境调整修改脚本,检查并确保代码的准确性与安全性,尤其是你在代码中加入具有风险操作指令时,例如增加/删除配置时。
三、脚本内容
import paramiko
import time
import csv
import os
# 确认当前脚本所在目录,并构建ips.csv文件的路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
IPS_FILE = os.path.join(BASE_DIR, "ips.csv")
# 读取IP地址列表,忽略空行和#开头的行,并去除重复的IP地址
ip = []
print ("正在读取IP配置文件…")
with open(IPS_FILE, "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
if not row or row[0].strip().startswith("#"):
continue
ip.append(row[0].strip())
set_ip = set(ip)
if len(set_ip) == len(ip):
print ("读取到的IP地址列表,共", len(ip), "个IP地址,没有重复的IP地址")
else:
count_duplicates = len(ip) – len(set_ip)
ip = list(set_ip)
print (f"读取到的IP地址列表,共{len(ip)}个IP地址,有{count_duplicates}个重复的IP地址,已自动去重")
username = "hao"
password = "admin12345"
ssh_client = paramiko.SSHClient ()
ssh_client.set_missing_host_key_policy (paramiko.AutoAddPolicy ())
for i in ip:
print ("正在连接至", i)
ssh_client.connect (
hostname=i,username=username,password=password,
look_for_keys=False,allow_agent=False
)
command = ssh_client.invoke_shell ()
import re
time.sleep(1.5)
output = command.recv(65535).replace(b'\\x00',b'').decode('ASCII').replace('\\r\\n','').strip()
match = re.search(r'[<\\[](.*?)[>\\]]',output,re.M)
sysname = match.group(1) if match else "未知系统"
print ("你已成功连接至", i, "系统名称:", sysname)
#向设备发送指令,可自行编辑修改你要发送的命令
time.sleep (0.1)
command.send ("sys\\n")
command.send ("dis version\\n")
time.sleep (0.5)
output_text = command.recv(65535).decode('ASCII').replace('\\r','').replace('\\x00','')
print (output_text)
# 保存回显结果到TXT文件
filename = os.path.join(BASE_DIR, f"[{sysname}]_{i}_{time.strftime('%Y%m%d%H%M%S')}_output.txt")
with open(filename, 'w', encoding='utf-8') as f:
f.write(f"交换机IP: {i} 系统名称:{sysname}\\n")
f.write("=" * 50 + "\\n")
f.write(output)
f.write(output_text)
f.write("\\n" + "=" * 50 + "\\n")
f.write(f"检查时间: {time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"回显结果已保存到文件: {filename}")
ssh_client.close ()
print ("已关闭", i, "的连接")
print ("—————————————————————")
print ("================================================================")
print ("检查结束")
四、执行结果
IP文件内容如下,脚本会忽略空行和以#开头的行:

执行脚本可以看到如下信息

生成了相应的txt文件

保存的txt文件内容如下

五、持续学习与改进计划
原创声明:
本文来自博客园,作者:haosend,原文链接:https://www.cnblogs.com/haosend/p/19633409
原创作品,版权归作者所有。
转载未经作者同意,必须标注原文链接,并保留此段声明,否则保留追究法律责任的权利。
网硕互联帮助中心





评论前必须登录!
注册