使用 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 中解决。
文件传输:使用 SFTP(安全文件传输协议),Paramiko 可以在本地和联网设备之间进行文件传输。此功能使下载日志文件或上传配置文件等简单任务变得更容易。
对于文件传输任务,Paramiko 提供了 SFTPClient 类。要将文件传输到远程设备或从远程设备传输文件,您可以使用 put() 和 get() 等方法。
Netmiko 简介
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、设置接口和更改访问控制列表。通过将配置存储在文件中,您可以轻松管理和版本控制您的网络配置。
解析输出:Send_command_timing() 和 send_command_expect() 内置于 Netmiko 中,用于解析命令输出。这些技术管理交互式命令并保留输出,直到发出一组特定的提示。
解析命令输出对于获取相关数据和根据输出执行其他操作至关重要。通过提供可以处理各种提示和场景的方法,Netmiko 使自动化困难任务变得更加简单。
示例:检索设备信息
让我们举一个使用 Paramiko 和 Netmiko 从网络设备检索设备信息的实际示例:
import paramiko from netmiko import ConnectHandler # Paramiko SSH 连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.0.1', username='admin', password='password') # Netmiko 连接 device = { 'device_type': 'cisco_ios', 'ip': '192.168.0.1', 'username': 'admin', 'password': 'password', } net_connect = ConnectHandler(**device) # 使用 Paramiko 检索设备信息 stdin, stdout, stderr = ssh.exec_command('show version') output = stdout.read().decode() print(output) # 使用 Netmiko 检索设备信息 output = net_connect.send_command('show version') print(output) # 关闭连接 ssh.close() net_connect.disconnect()
在此示例中,我们使用 Paramiko 和 Netmiko 建立 SSH 连接以检索设备的版本信息。这两种方法都提供类似的功能,但 Netmiko 通过抽象 SSH 连接详细信息并提供统一的 API 简化了该过程。
结论
Paramiko 和 Netmiko 是功能强大的 Python 库,可简化网络任务并实现高效的网络自动化。无论您需要建立 SSH 连接、执行命令、传输文件还是管理配置,这些库都提供了高级抽象和一致的 API。通过利用它们的功能,您可以简化网络自动化工作流程并减少手动工作量。将 Paramiko 和 Netmiko 纳入您的网络自动化工具库,使您能够简化和自动化复杂的网络任务,使 Python 成为网络管理员和工程师的宝贵工具。因此,开始探索 Paramiko 和 Netmiko,以简化 Python 中的网络任务并释放网络自动化的全部潜力。