概述
背景:網絡系統運維與建設:工作中發現客戶使用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