通过python,自动化备份华为华三交换机配置信息接口信息
·
第一步
打开cmd或者控制台pycharm或者其他软件控制台
pip install paramiko
#因连接需要paramiko模块
第二步
import paramiko
import time
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# 读取用户名列表
try:
with open("username.txt", "r", encoding="utf-8") as f01:
usernames = [line.strip() for line in f01.readlines() if line.strip()]
logger.info(f"成功读取username.txt,共 {len(usernames)} 个用户名")
except FileNotFoundError:
logger.error("错误: 未找到username.txt文件")
usernames = []
except PermissionError:
logger.error("错误: 没有读取username.txt文件的权限")
usernames = []
except Exception as e:
logger.error(f"读取username.txt文件时发生错误: {str(e)}")
usernames = []
# 读取密码列表
try:
with open("password.txt", "r", encoding="utf-8") as f02:
passwords = [line.strip() for line in f02.readlines() if line.strip()]
logger.info(f"成功读取password.txt,共 {len(passwords)} 个密码")
except FileNotFoundError:
logger.error("错误: 未找到password.txt文件")
passwords = []
except PermissionError:
logger.error("错误: 没有读取password.txt文件的权限")
passwords = []
except Exception as e:
logger.error(f"读取password.txt文件时发生错误: {str(e)}")
passwords = []
# 读取IP地址列表
try:
with open("iplist.txt", "r", encoding="utf-8") as f:
ips = [line.strip() for line in f.readlines() if line.strip()]
logger.info(f"成功读取iplist.txt,共 {len(ips)} 个IP地址")
except FileNotFoundError:
logger.error("错误: 未找到iplist.txt文件")
ips = []
except PermissionError:
logger.error("错误: 没有读取iplist.txt文件的权限")
ips = []
except Exception as e:
logger.error(f"读取iplist.txt文件时发生错误: {str(e)}")
ips = []
# 通过索引实现一一对应
if not ips:
logger.error("没有可处理的IP地址,程序退出")
else:
for i in range(len(ips)):
ip = ips[i]
usern = usernames[i] if i < len(usernames) else ""
passw = passwords[i] if i < len(passwords) else ""
if not usern or not passw:
logger.warning(f"设备 {ip} 缺少用户名或密码,跳过处理")
continue
logger.info(f"开始处理设备: {ip}")
ssh = None
try:
# 建立SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip, username=usern, password=passw, timeout=5)
logger.info(f"恭喜您成功登录设备 {ip}")
# 发送命令
command = ssh.invoke_shell()
command.send("display version\n")
time.sleep(1)
command.send("display current-configuration\n")
time.sleep(1)
command.send("display interface brief\n")
time.sleep(1)
# 获取输出
output = ""
while command.recv_ready():
output += command.recv(65535).decode("ascii")
time.sleep(0.1)
logger.info(f"成功获取设备 {ip} 的配置信息")
# 保存输出到文件,并在末尾添加当前日期
try:
filename = f"{ip}_config.txt"
with open(filename, "w", encoding="utf-8") as f03:
f03.write(output)
f03.write("\n\n" + "=" * 50 + "\n")
f03.write(f"执行时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}\n")
f03.write(f"设备IP: {ip}\n")
logger.info(f"配置信息已保存到 {filename}")
except Exception as e:
logger.error(f"保存设备 {ip} 配置时发生错误: {str(e)}")
except paramiko.AuthenticationException:
logger.error(f"设备 {ip} 认证失败: 用户名或密码错误")
except paramiko.SSHException as e:
logger.error(f"设备 {ip} SSH连接失败: {str(e)}")
except TimeoutError:
logger.error(f"设备 {ip} 连接超时")
except Exception as e:
logger.error(f"处理设备 {ip} 时发生错误: {str(e)}")
finally:
if ssh:
try:
ssh.close()
logger.info(f"已关闭设备 {ip} 的SSH连接")
except Exception as e:
logger.error(f"关闭设备 {ip} 的SSH连接时发生错误: {str(e)}")
logger.info("所有设备处理完成")
第三步
上述代码保存至D盘并命名为switch.py
第四步
在环境中运行上述代码或者通过
C:/Users/***/AppData/Local/Programs/Python/Python313/python.exe d:/switch.py
#C:/Users/***/AppData/Local/Programs/Python/Python313/python.exe (这个是你的python安装位置)
记得安装python!
附上python下载地址
https://www.python.org/downloads/
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)