一、脚本运行前提

1.1 通过SSH登录

1.2 需要登录设备管理地址统一放在一个文件类型为.txt的文本文件,这里习惯命名为ip_list.txt

1.3 需要执行的命令统一放在一个文件类型为.txt的文本文件,这里习惯命名为cmd_5700.txt

二、万能脚本

#coding=utf-8
#使用import语句导入paramiko模块、time模块、sys模块和getpass模块
import paramiko
import time
#方便将getpass.getpass("password: ")简写成getpass("password: ")
from getpass import getpass
import sys

#使用input()函数以及getpass模块实现交互式输入用户名和密码
username = input("Username: ")
password = getpass("password: ")
#获取运行 Python 程序的命令行的第一个参数(在这里具体指python3.8后面的ip_list_cmd.txt)
ip_file = sys.argv[1]
#获取运行 Python 程序的命令行的第二个参数(在这里具体指python3.8后面的cmd5700.txt)
cmd_file = sys.argv[2]

#以只读的权限读取名为ip_list.txt的文件并将文件内容赋值给变量iplist
iplist = open(ip_file,'r')
#一行一行读取ip_list.txt文件内容并将其赋值给变量line
for line in iplist.readlines():
#将ip进行去除首尾空行处理
    ip = line.strip()
#调用Paramiko的SSHClient()方法,将其赋值给变量ssh_client
    ssh_client = paramiko.SSHClient()
#使用ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())来让Paramiko接受服务端提供的公钥
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#调用paramiko.SSHClient()的函数connect()进行SSH登录,look_for_keys=False用来解决避免Paramiko使用已存在密钥来登录设备
    ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)
#打印提示信息
    print("--------------------------------------------------------------")
    print(f"You have successfully connect to {ip}.")
#调用Paramiko的SSHClient()的invoke_shell()方法来唤醒shell,即设备命令行
    command = ssh_client.invoke_shell()
#以只读的权限读取名为cmd5700.txt的命令文件并将文件内容赋值给变量cmdlist
    cmdlist = open(cmd_file,'r')
#将文件指针移到开头位置
    cmdlist.seek(0)
#一行一行读取cmd5700.txt命令文件内容并将其赋值给变量line
    for line in cmdlist.readlines():
#执行cmd5700.txt文件里命令
        command.send(line + '\n')
#调用time模块下的sleep()函数手动让Python休眠3秒
        time.sleep(3)
#关闭cmd5700.txt文件
    cmdlist.close()
#设置命令行最大回显内容数并将其赋值给变量output并用decode("ascii")将其解析为ASCII编码
    output = command.recv(65535).decode('ascii')
    print(output)
#关闭文件ip_list.txt文件
iplist.close()
#断开SSH连接
ssh_client.close()

三、适用场景

3.1 多台同厂商设备需要配置相同的配置

四、操作系统

4.1 windows系统

4.1.1 IDLE环境

4.1.1.1 在脚本所在文件夹下新建两个文件,一个包含需要登录的设备管理地址,另一个包含需要执行的命令,过程略

4.1.1.2 使用IDLE运行脚本

图一

4.1.1.3 添加sys.argv[1]、sys.argv[2]的参数

图二

图三

4.1.1.4 输入交换机的账号和密码即可

图四

注意:windows环境下输入的密码是明文的,这个不用理会

4.1.2 CMD环境

4.1.2.1 在脚本所在文件夹下新建两个文件,一个包含需要登录的设备管理地址,另一个包含需要执行的命令,过程略

4.1.2.2 同时按'window键'和'R'键并输入'cmd'进入命令行视图

图五

4.1.2.3 进入脚本所在文件夹

图六

4.1.2.4 在脚本所在文件夹下执行脚本文件

图七

4.2 Linux系统

4.2.1 创建需要两个文件,一个包含需要登录的设备管理地址,另一个包含需要执行的命令

图八

4.2.2 创建万能脚本

图九

4.2.3 执行脚本

图十