使用 Paramiko 和 Netmiko 簡化 Python 中的網路任務


在當今互聯互通的世界中,計算機網路在促進通訊和資料交換方面發揮著至關重要的作用。隨著網路複雜性的增加,管理和自動化網路任務變得越來越重要。Python 憑藉其簡單性和通用性,已成為一種強大的網路自動化程式語言。在本文中,我們將探討兩個流行的 Python 庫 Paramiko 和 Netmiko,它們簡化了網路任務並實現了高效的網路自動化。

瞭解 Paramiko

為了使用 SSH 協議自動化和簡化安全的網路裝置通訊,開發了 Paramiko Python 庫。它提供了一個高階 API 用於與網路硬體互動,使設定 SSH 連線、執行命令、傳送檔案和處理身份驗證變得簡單。Paramiko 因其可靠性和易用性而成為網路自動化任務的最佳解決方案。

要開始使用 Paramiko,您需要使用 pip 安裝它

pip install paramiko

Paramiko 的主要功能

  • SSH 連線:您可以使用 Paramiko 建立與網路裝置的 SSH 連線,這使您可以安全地執行命令和傳送檔案。它支援基於金鑰和基於密碼的身份驗證方法。

    Paramiko 中的 SSHClient 類允許您透過 SSH 連線到遠端裝置。在連線過程中,您可以處理任何可能的異常並設定自動新增主機金鑰的策略。

  • 命令執行:您可以使用 Paramiko 向網路裝置發出命令,然後檢索結果。此功能對於執行診斷、自動化重複性任務和檢索裝置資訊特別有用。

    SSHClient 類的 exec_command() 方法可用於透過 Paramiko 執行命令。此方法返回三個類似檔案的物件:Stdin、Stdout 和 Stderr。命令的輸出可以在 stdout 中檢視,任何錯誤都可以在 stderr 中處理。

  • 檔案傳輸:Paramiko 允許在本地和網路裝置之間使用 SFTP(安全檔案傳輸協議)進行檔案傳輸。此功能簡化了諸如下載日誌檔案或上傳配置檔案等簡單任務。

    對於檔案傳輸任務,Paramiko 提供了 SFTPClient 類。您可以使用 put() 和 get() 等方法將檔案傳輸到遠端裝置和從遠端裝置傳輸檔案。

Netmiko 簡介

Netmiko 是一個構建在 Paramiko 之上的多供應商庫,它使網路自動化更加簡單。它提供了一個統一的 API 用於與不同的網路裝置通訊,而不管供應商或作業系統如何。Netmiko 支援的裝置包括 Cisco、Juniper、Arista、華為和其他製造商的裝置。

要安裝 Netmiko,您可以使用 pip

pip install netmiko

使用 Netmiko 簡化網路任務

由於 Netmiko 隱藏了網路裝置差異,因此您可以建立跨不同供應商一致工作的網路自動化指令碼。以下是 Netmiko 的一些主要功能

  • 裝置連線:Netmiko 提供了一種簡單可靠的方法來連線網路裝置。您需要提供裝置的 IP 地址、使用者名稱、密碼和可選的 SSH 埠以建立 SSH 連線。

    在建立連線時,您可以指定 Netmiko 支援的裝置型別。例如,對於 Cisco IOS 裝置,您可以將“cisco_ios”指定為裝置型別。

  • 命令執行:send_command() 方法允許您向網路裝置傳送命令。Netmiko 處理 SSH 連線和命令執行的方式使檢索命令輸出變得簡單。

    send_command() 方法將命令作為引數傳遞,並將輸出作為字串返回。其他 Netmiko 方法,如 send_command_timing() 和 send_command_expect(),處理互動式命令並在收到特定提示符之前保持輸出。

  • 配置管理:Netmiko 中的 send_config_from_file() 方法簡化了配置管理。裝置配置可以儲存在單獨的檔案中,並且 Netmiko 可用於一致地將這些配置應用於裝置。

    藉助此功能,您可以自動化配置任務,例如新增 VLAN、設定介面和更改訪問控制列表。透過將配置儲存在檔案中,您可以輕鬆管理和版本控制網路配置。

  • 解析輸出:Netmiko 內建了 send_command_timing() 和 send_command_expect() 來解析命令輸出。這些方法處理互動式命令並在發出特定一組提示符之前保持輸出。

    解析命令輸出對於獲取相關資料並在輸出的基礎上執行其他操作至關重要。透過提供可以處理各種提示符和場景的方法,Netmiko 簡化了自動化複雜任務的過程。

示例:檢索裝置資訊

讓我們以一個使用 Paramiko 和 Netmiko 從網路裝置檢索裝置資訊的實際示例為例

import paramiko
from netmiko import ConnectHandler

# Paramiko SSH connection
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.0.1', username='admin', password='password')

# Netmiko connection
device = {
    'device_type': 'cisco_ios',
    'ip': '192.168.0.1',
    'username': 'admin',
    'password': 'password',
}

net_connect = ConnectHandler(**device)

# Retrieve device information using Paramiko
stdin, stdout, stderr = ssh.exec_command('show version')
output = stdout.read().decode()

print(output)

# Retrieve device information using Netmiko
output = net_connect.send_command('show version')

print(output)

# Close connections
ssh.close()
net_connect.disconnect()

在此示例中,我們使用 Paramiko 和 Netmiko 建立 SSH 連線以檢索裝置的版本資訊。這兩種方法都提供了類似的功能,但 Netmiko 透過抽象 SSH 連線詳細資訊並提供統一的 API 簡化了流程。

結論

Paramiko 和 Netmiko 是強大的 Python 庫,它們簡化了網路任務並實現了高效的網路自動化。無論您需要建立 SSH 連線、執行命令、傳輸檔案還是管理配置,這些庫都提供了高階抽象和一致的 API。透過利用它們的功能,您可以簡化網路自動化工作流程並減少手動操作。將 Paramiko 和 Netmiko 整合到您的網路自動化工具集中,使您能夠簡化和自動化複雜的網路任務,從而使 Python 成為網路管理員和工程師的寶貴工具。因此,開始探索 Paramiko 和 Netmiko 以簡化您在 Python 中的網路任務,並釋放網路自動化的全部潛力。

更新於: 2023-07-26

821 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.