通过SSH连接批量查询交换机信息

# 导入paramiko模块,用于ssh连接
import paramiko

# 定义一个函数,用于执行ssh命令,并返回输出结果
def ssh_command(ip, port, username, password, command):
    # 创建一个ssh客户端对象
    ssh = paramiko.SSHClient()
    # 设置自动添加主机密钥
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 定义一个超时时间,单位为秒
    timeout = 10
    try:
        # 连接到目标主机,设置端口和超时时间
        ssh.connect(ip, port=port, username=username, password=password, timeout=timeout)
        # 执行命令,并获取标准输出和错误输出
        stdin, stdout, stderr = ssh.exec_command(command)
        # 读取输出结果
        output = stdout.read().decode()
        # 关闭连接
        ssh.close()
        # 返回输出结果
        return output
    except paramiko.ssh_exception.SSHException as e:
        # 如果发生SSH异常,打印错误信息,并返回空字符串
        print(f"SSH error: {e}")
        return ""
    except Exception as e:
        # 如果发生其他异常,打印错误信息,并返回空字符串
        print(f"Other error: {e}")
        return ""

# 定义一个列表,存储所有该型号交换机的ip地址,端口,用户名和密码
switches = [
    {"ip": "192.168.1.1", "port": 22, "username": "admin", "password": "admin"},
    {"ip": "192.168.1.2", "port": 22, "username": "admin", "password": "admin"},
    {"ip": "192.168.1.3", "port": 2222, "username": "admin", "password": "admin"},
]

# 定义一个列表,存储要执行的命令
commands = [
    "display cpu summary",
    "display memory summary",
]

# 遍历每个交换机
for switch in switches:
    # 打印交换机的ip地址和端口
    print(f"Switch IP: {switch['ip']}, Port: {switch['port']}")
    # 遍历每个命令
    for command in commands:
        # 打印命令
        print(f"Command: {command}")
        # 调用ssh_command函数,执行命令,并获取输出结果
        output = ssh_command(switch['ip'], switch['port'], switch['username'], switch['password'], command)
        # 打印输出结果
        print(output)
        # 打印分隔符
        print("-" * 40)

posted @ 2023-07-12 16:28  wanghongwei-dev  阅读(95)  评论(0编辑  收藏  举报