python实现远程备份交换机的配置
拓扑搭建:
环境搭建:
注意这里的云连接的是19.1这个网段,所以交换机SW1也要配置到同一个网段
sw1:
配置IP,划分vlan: [sw1]vl 100 [sw1]int vlan 100 [sw1-Vlanif100]ip add 192.168.19.10 24 [sw1]int g0/0/1 [sw1-GigabitEthernet0/0/1]po li ac [sw1-GigabitEthernet0/0/1]po de vl 100 交换机部署ssh: [sw1]stelnet server enable # 启动ssh服务的远程登录功能 [sw1]ssh user zhangxiong # 新建SSH用户 [sw1]ssh user zhangxiong authentication-type password # 配置ssh用户密码认证方式 [sw1]ssh user zhangxiong service-type stelnet # 配置ssh用户的服务方式为远程登录
# 开放 vty 端口,能被远程登录 # 开放 编号为 0 1 2 3 4 的 vty端口,同时支持五个远程用户连接 # 认证模式为 aaa---> authentication 认证(谁能登录进来) # ---> authorizathon 授权(谁进来能干什么) # ---> according 审计(谁进来干了什么) [sw1]user-interface vty 0 4 [sw1]authentication-mode aaa [sw1]protocol inbound ssh # 登入协议为ssh # 三A认证配置 [sw1]aaa [sw1-aaa]local-user zhangxiong password cipher huawei@123 # 配置本地账号的登录口令 [sw1-aaa]local-user zhangxiong privilege level 15 # 配置账号登录后的管理级别,15最高 [sw1-aaa]local-user zhangxiong service-type ssh # 配置本地用户的接入类型
这时基础配置就完成了,主要是在sw1上开启了ssh服务并配置了账号和密码验证,然后配置远程登录,从而可以实现用python进行连接sw1。接下来开始正题:
python代码解析:
# display current-configuration 查看当前的配置 # display saved-configuration # 查看当前保存的配置 # display current-configuration | include ip route 筛选配置过的ip route命令 import paramiko import time # 创造一个 SSH 客户端 ssh_client = paramiko.SSHClient() # 创建一个ssh客户端对象 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) """ AutoAddPolicy:自动添加主机名以及主机秘钥 set_missing_host_key_policy:一个连接主机的策略(没有本地主机秘钥或者HostKeys对象时) """ ssh_client.connect(hostname=192.168.19.10, username=zhangxiong, password=huawei@123) # 连接sw1,用户名密码为sw1中远程登录设置的 command = ssh_client.invoke_shell() # 打开连接到的终端,使用ssh shell通道,相当于使用ssh远程到了sw1 # 给设备 发送命令 """ send发送内容,然后将字符串进行编码,以便让计算机认识 """ command.send("sys ".encode()) # 进入系统视图, 表示在终端执行回车操作 command.send("user-interface vty 0 4 ".encode()) command.send("screen-length 0 ".encode()) """ 这里这样配置是因为执行dis cu 后会显示不完整,只会显示默认的24行,然后需要我们自己 去按回车或者空格,才能进行翻页,会导致我们在python中回显只能看到前面24行。 这里是进入了远程登录视图,设置了荧幕长度为0,0表示显示所有行 """ command.send("dis cu ".encode()) # 发送dis cu 命令并编码 time.sleep(3) # 需要进行睡眠,以便让下一条接收响应的命令能够有时间回显 recv = command.recv(65535).decode() # recv接收响应,字节为65535,并进行解码 result = recv.splitlines() # result现在是一个列表,存放了回显的命令,每个命令是一个元素 """ splitlines:splitlines() 按照行( , , )分隔,返回一个包含各行作为元素的列表 这样做是因为在保存文件后发现每行命令后多出一行空行 """ print(recv) # 将回显内容保存到本地 with open("sw1.txt", w) as back: for item in result: print(item) back.write(item+" ") ssh_client.close()
执行完成后在脚本本地会多出一个sw1.txt的文件存放了dis cu后回显的内容