概述
背景:网络系统运维与建设:工作中发现客户使用python脚本批量操作网络设备导出多台网络设备的配置定期执行相关的巡检工作
修改配置
# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2024/3/3-23:31
# Python-Script: 38_module_paramiko_1.py
# describe:
paramiko 模块用于网络系统管理运维的模块可用于修改网络设备的配置
背景:网络系统运维与建设:工作中发现客户使用python脚本批量修改多台网络设备的配置https://zhuanlan.zhihu.com/p/370526806
https://zhuanlan.zhihu.com/p/486260131
"""
import paramiko
import time
import getpass# 通过input() 获取用户名并赋值给username
username = input("Username:")
# 通过getpass模块中getpass() 获取输入的密码字符串并赋值给password
password = getpass.getpass(prompt="Password:", stream=None)# 循环遍历连续的ip地址
for i in range(1, 5):ip = "192.168.139." + str(i)# 此时 ip_list.txt 需要与 脚本 在相同的文件夹中# f = open('ip_list.txt')# for line in f.readlines():# ip = line.strip()# 通过paramiko模块中SSHClient()函数赋值给ssh_client, 使用户通过ssh_client的相关函数传入必要的信息ssh_client = paramiko.SSHClient()# 设置ssh_client自动使用主机密码策略ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 设置ssh_client的登录密码等信息ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)# 将ssh_client的命令行shell赋值给command,使客户通过command.send()函数向设备输入命令command = ssh_client.invoke_shell()# 交换机命令调度command.send("system-view" + "\n") # 切换系统模式# 关闭消息通知(防止log信息刷屏)# command.send('undo info-center enable\n')command.send("aaa" + "\n")# 修改密码command.send("local-user admin password cipher Jan16@123" + "\n")# 返回用户视图保存并退出command.send("return" + "\n")command.send("save" + "\n")command.send("Y" + "\n")command.send("\n")# 暂停2秒time.sleep(2)# 将执行过程赋值给output,通过print output回显内容output = command.recv(65535).decode()print(output)# 保存结果到python脚本同目录下的result文件夹中f1 = open(f"./result/{ip}_dis_int_bri.txt", "w")f1.write(output)f1.close()# 关闭文件# f.close()ssh_client.close()
获取配置
# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2024/3/4-0:29
# Python-Script: 38_module_paramiko_2.py
# describe:
paramiko 模块用于网络系统管理运维的模块执行计划任务
背景:网络系统运维与建设:工作中发现客户使用python脚本批量导出多台网络设备的配置定期执行相关的巡检工作
https://zhuanlan.zhihu.com/p/370526806
https://zhuanlan.zhihu.com/p/486260131
"""
import paramiko
import time
import getpass
from datetime import datetimeusername = "admin"
password = "ABC123"for i in range(1, 5):ip = "192.168.139." + str(i)# 通过paramiko模块中SSHClient()函数赋值给ssh_client, 使用户通过ssh_client的相关函数传入必要的信息ssh_client = paramiko.SSHClient()# 设置ssh_client自动使用主机密码策略ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 设置ssh_client的登录密码等信息ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)# 将ssh_client的命令行shell赋值给command,使客户通过command.send()函数向设备输入命令command = ssh_client.invoke_shell()# 提示ssh登录成功print(f'ssh {ip} successful')# 关闭分屏功能command.send('screen-length 0 temporary\n')# 获取交换机的运行配置信息output = (command.send('display current-configuration\n'))# 暂停2stime.sleep(2)# 读取当前时间now = datetime.now()# 打开备份文件进行文件备份backup = open('/root/backup' + str(now.year) + "-" + str(now.month) + "-" + str(now.day) + "-" + ip + ".txt", "a+")# 提示正在备份print(f"backuping + {ip}")# 回显信息赋值给recvrecv = command.recv(65535).decode()# 写入备份文件backup.write(recv)# 关闭打开的备份文件backup.close()# 断开链接ssh_client.close()
相关链接
https://zhuanlan.zhihu.com/p/370526806
https://zhuanlan.zhihu.com/p/486260131