最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Python中paramiko工具批量的查詢、管理、配置路由器交換機(jī)

 更新時(shí)間:2026年02月25日 09:13:50   作者:Haosend  
本篇文章主要記錄在學(xué)習(xí)過程中,使用paramiko小批量管理路由器交換機(jī)的練習(xí),循序漸近的理解paramiko這個(gè)工具和代碼運(yùn)用,感興趣的朋友跟隨小編一起看看吧

本篇文章主要記錄在學(xué)習(xí)過程中,使用paramiko小批量管理路由器交換機(jī)的練習(xí),循序漸近的理解paramiko這個(gè)工具和代碼運(yùn)用。

實(shí)現(xiàn)登錄多臺(tái)交換機(jī),獲取設(shè)備的hostname,執(zhí)行簡(jiǎn)單的查詢交換機(jī)版本命令,并將查詢信息保存到txt文件中。

一、腳本實(shí)現(xiàn)

  1. 設(shè)備IP保存在同目錄下的ips.csv文件中,也可以修改使用txt文檔或其他文檔格式。
  2. 去除重復(fù)的IP
  3. 登錄交換機(jī),執(zhí)行sys,dis version命令
  4. 保存交換機(jī)的操作結(jié)果到txt文件中,文件名稱為hostname_ip_date+time_output.txt

二、腳本缺點(diǎn)

本篇內(nèi)容均在華三模擬器上實(shí)現(xiàn),腳本旨在學(xué)習(xí),練習(xí),不以最終使用為目的,因此尚存在以下問題

  1. 假設(shè)所有設(shè)備使用了相同的用戶名和密碼。實(shí)際中可能需要?jiǎng)?chuàng)建包含用戶名密碼的配置文件,以適配不同設(shè)備有不同的密碼。
  2. 同上,在腳本中直接使用了用戶名,密碼,不安全。
  3. 直接在腳本中使用了設(shè)備指令,不適用于多品牌,多版本等場(chǎng)景,因?yàn)椴煌O(shè)備的命令行可能不同。
  4. 腳本單臺(tái)設(shè)備順序執(zhí)行,如果設(shè)備較多,執(zhí)行設(shè)備命令較多,則非常耗時(shí),效率低下。
  5. 當(dāng)設(shè)備回顯內(nèi)容太多需要翻頁(yè)時(shí),信息收集不完整,除非你已關(guān)閉了設(shè)備上回顯翻頁(yè)。
  6. 僅適配了密碼登錄,不適用于使用密鑰管理的設(shè)備。
  7. 沒有循環(huán)讀取回顯,最多讀取保存65535行,如果執(zhí)行了較多的操作,操作記錄可能不完整。

如果你所在實(shí)際場(chǎng)景設(shè)備單一,數(shù)量不多,要求不高的情況下,可以自行修改腳本并使用。

警告

如果你要用,請(qǐng)自行結(jié)合環(huán)境調(diào)整修改腳本,檢查并確保代碼的準(zhǔn)確性與安全性,尤其是你在代碼中加入具有風(fēng)險(xiǎn)操作指令時(shí),例如增加/刪除配置時(shí)。

三、腳本內(nèi)容

import paramiko
import time
import csv
import os
# 確認(rèn)當(dāng)前腳本所在目錄,并構(gòu)建ips.csv文件的路徑
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
IPS_FILE = os.path.join(BASE_DIR, "ips.csv")
# 讀取IP地址列表,忽略空行和#開頭的行,并去除重復(fù)的IP地址
ip = []
print ("正在讀取IP配置文件...")
with open(IPS_FILE, "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        if not row or row[0].strip().startswith("#"):
            continue
        ip.append(row[0].strip())
set_ip = set(ip)
if len(set_ip) == len(ip):
    print ("讀取到的IP地址列表,共", len(ip), "個(gè)IP地址,沒有重復(fù)的IP地址")
else:
    count_duplicates = len(ip) - len(set_ip)
    ip = list(set_ip)
    print (f"讀取到的IP地址列表,共{len(ip)}個(gè)IP地址,有{count_duplicates}個(gè)重復(fù)的IP地址,已自動(dòng)去重")
username = "hao"
password = "admin12345"
ssh_client = paramiko.SSHClient ()
ssh_client.set_missing_host_key_policy (paramiko.AutoAddPolicy ())
for i in ip:
    print ("正在連接至", i)
    ssh_client.connect (
        hostname=i,username=username,password=password,
        look_for_keys=False,allow_agent=False
        )
    command = ssh_client.invoke_shell ()
    import re
    time.sleep(1.5)
    output = command.recv(65535).replace(b'\x00',b'').decode('ASCII').replace('\r\n','').strip()
    match = re.search(r'[<\[](.*?)[>\]]',output,re.M)
    sysname = match.group(1) if match else "未知系統(tǒng)"
    print ("你已成功連接至", i, "系統(tǒng)名稱:", sysname)
    #向設(shè)備發(fā)送指令,可自行編輯修改你要發(fā)送的命令
    time.sleep (0.1)
    command.send ("sys\n")
    command.send ("dis version\n")
    time.sleep (0.5)
    output_text = command.recv(65535).decode('ASCII').replace('\r','').replace('\x00','')
    print (output_text)
    # 保存回顯結(jié)果到TXT文件
    filename = os.path.join(BASE_DIR, f"[{sysname}]_{i}_{time.strftime('%Y%m%d%H%M%S')}_output.txt")
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(f"交換機(jī)IP: {i} 系統(tǒng)名稱:{sysname}\n")
        f.write("=" * 50 + "\n")
        f.write(output)
        f.write(output_text)
        f.write("\n" + "=" * 50 + "\n")
        f.write(f"檢查時(shí)間: {time.strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"回顯結(jié)果已保存到文件: {filename}")
    ssh_client.close ()
    print ("已關(guān)閉", i, "的連接")
    print ("---------------------------------------------------------------")
print  ("================================================================")
print ("檢查結(jié)束")

四、執(zhí)行結(jié)果

IP文件內(nèi)容如下,腳本會(huì)忽略空行和以#開頭的行:

執(zhí)行腳本可以看到如下信息

生成了相應(yīng)的txt文件

保存的txt文件內(nèi)容如下

五、持續(xù)學(xué)習(xí)與改進(jìn)計(jì)劃

  1. 用戶名密碼獨(dú)立配置文件,以適配不同設(shè)備有不同密碼的場(chǎng)景。
  2. 增加密鑰登錄功能,以適配使用密鑰證書管理的設(shè)備。
  3. IP文件增加品牌或設(shè)備型號(hào)
  4. 增加以設(shè)備型號(hào)命名的獨(dú)立文件,用于存放不同設(shè)備的操作命令,以適配多品牌,多版本的網(wǎng)絡(luò)場(chǎng)景。
  5. 增加異步處理或多線程,提升超大網(wǎng)絡(luò)的執(zhí)行效率。
  6. 使用SNMP獲取設(shè)備的一些信息。
  7. 使用SNMP獲取更多的網(wǎng)絡(luò)信息,例如網(wǎng)絡(luò)拓?fù)洹?/li>
  8. 嘗試一個(gè)完整的網(wǎng)絡(luò)巡檢功能的腳本。
  9. 嘗試一個(gè)設(shè)備功能配置的腳本。
  10. 基于安全性,可能嘗試操作校檢。例如腳本要配置某端口的IP,如果該端口已存在配置,則生成日志并停止操作。
  11. 使用netconf管理維護(hù)設(shè)備。
  12. 提升腳本的健壯性。
  13. 網(wǎng)絡(luò)自動(dòng)化的嘗試。
  14. 其他,待定。

到此這篇關(guān)于如何使用Python中paramiko工具批量的查詢、管理、配置路由器交換機(jī)的文章就介紹到這了,更多相關(guān)python paramiko配置路由器交換機(jī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

新巴尔虎右旗| 阳泉市| 浠水县| 彭山县| 全州县| 石林| 绥化市| 沂源县| 平安县| 绵竹市| 开平市| 昭觉县| 泉州市| 霍城县| 洛宁县| 滁州市| 太和县| 康乐县| 平阳县| 兴国县| 石狮市| 措勤县| 康定县| 长宁区| 藁城市| 马关县| 隆尧县| 兰考县| 射洪县| 泾源县| 柏乡县| 白城市| 漯河市| 读书| 柳江县| 宜兴市| 渝北区| 普陀区| 乌拉特后旗| 正定县| 翼城县|