第一步
打开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/

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐