🥑Python网络设备连接和配置工具网络安全之一
Last updated
Last updated
Python | 网络设备 | SSH | Paramiko | Jinja2 | Netmiko | NETCONF | ncclient | pyATS | 配置模板 | 模型驱动可编程 | Ansible 模块
使用SSH 的纯Python包Paramiko 访问单台设备和多台设备
使用Jinja2 IP地址管理
使用多供应商 SSH Python 库netmiko提升管理权限和公私密钥
使用网络配置协议工具Netconf和ncclient 网络设备链接管理,提取,修改配置以及响应事件
NAPALM自动化复杂多供应商网络管理:不同设备连接,向设备发出命令,测试,网络备份,设备配置,收集设备信息,使用 Jinja2 和 NAPALM 创建并应用配置模板,回滚配置,验证部署
pyATS自动化网络测试:重新审视测试的概念,创建测试床文件,连接和发出命令,检索设备的当前状态
Genie库框架:创建便携式配置脚本,比较设备的当前状态
requests:重新审视 HTTP 请求响应模型,发出 HTTP 请求,检索所有接口,创建虚拟局域网 (VLAN) 更新/删除 VLAN
当您的Python程序需要运行外部依赖密码的程序,或访问远程服务器时,请使用Paramiko。 Paramiko 是一个实现 SSHv2 协议的 Python 模块。 Paramiko 不是 Python 标准库的一部分,尽管它被广泛使用。 本指南向您展示如何在 Python 脚本中使用 Paramiko 通过密码和 SSH 密钥对服务器进行身份验证。
他的部分向您展示了如何使用用户名和密码向远程服务器进行身份验证。 首先,创建一个名为first_experiment.py 的新文件并添加示例文件的内容。
password_login.py
该文件使用您提供的 IP 地址和凭据通过 SSH 连接到远程服务器。然后,它使用 df 命令生成服务器可用磁盘空间的报告。
使用以下命令执行该文件:
您会看到类似的输出:
上面的文件提供了一个高级示例,您可以使用该示例将 Paramiko 合并到您的 Python 代码中。 虽然 Paramiko 所做的一切也可以使用 shell 命令完成,但 Paramiko 为您提供了 Python 的所有功能。 Python 使您能够访问结构化数据、循环、解析和其他超出 shell 脚本可用的强大功能。 例如,如果您正在编写一个程序来计算系统使用百分比,Python 更擅长从系统输出中提取和计算值。
Paramiko 的具体优势之一是正确处理 SSH 添加密钥。 上面的介绍性示例取决于您的受限用户帐户密码的使用。 然而,使用 SSH 密钥进行服务器身份验证更安全。 下面的示例文件提供了一个报告,该报告会提醒您未包含在预期用户列表中的用户进行的任何登录。 Python 脚本依赖 Paramiko(请注意 key_based_connect() 函数)使用 SSHv2 身份验证连接到代码的 server_list 列表中提供的任何服务器。
key_based_login.py
使用以下命令执行该文件:
如果 Python 脚本预期列表之外的用户访问您的其中一台服务器,Python 脚本将返回以下内容:
使用 Python 和 paramiko 包建立到网络设备的 SSH 连接。 然后,我们将使用这个已建立的连接来发出简单的命令并从设备读回基本输出。
使用 Python 和 jinja2(一种广泛使用的模板语言)填充 Python 脚本提供的数据。 使用 jinja2 模板中的循环、控制结构和继承,我们将构建高度可定制的配置模板
构建在 paramiko 之上的 netmiko。 netmiko 包提供了与多个供应商的网络设备的 SSH 交互的抽象。 使用 netmiko,我们将与网络设备交互以检索状态信息并应用配置更改。
使用模块指定网络基础设施的所需状态,然后将其应用于设备。 我们将使用 ncclient 包根据 YANG 模型更改网络设备。
着眼于 NAPALM,它允许开发人员使用统一的接口自动化复杂的多供应商网络
使用 pyATS 和 Genie 对各种设备进行从简单的连接测试到高级状态测试。
探索请求包以将不同的 RESTCONF JSON 负载发送到网络设备。
使用 requests 包查询 REST API,以从多个网络设备检索信息并对多个网络设备应用更改。
自己编写这样的模块。 这将允许您从 Ansible 调用之前编写的 Python 脚本。