目前管理的交换机数量庞大,一些常用功能的配置往往需要多次、逐一登录交换机手动操作。
为提高统一管理、配置的效率,采用Python写了这个小工具,实现了:
- Python SSH操作,依赖于paramiko库
- 开启、关闭交换机分页显示功能
- 开启、关闭交换机特权模式
- 读取交换机列表文件、命令列表文件,批量执行
- 多线程并行的多台交换机同时配置
- 多线程进程数量自定义设置
paramiko库
Paramiko is a Python (2.6+, 3.3+) implementation of the SSHv2 protocol [1], providing both client and server functionality. While it leverages a Python C extension for low level cryptography (PyCrypto), Paramiko itself is a pure Python interface around SSH networking concepts.
简单的SSH连接、执行命令过程:
1 | client = SSHClient() |
该脚本在Linux SSH后执行单挑命令操作时,顺利执行,但如果SSH交换机后执行多条命令时,将抛出异常。
这是由于exec_command()命令执行后,Channel会在Channel.settimeout.settimeout时间内关闭。
如果需要多次交互的执行命令、获取返回信息,应使用invoke_shell()函数,代码更改如下:
1 | client = SSHClient() |
netlib库
官网:jtdub/netlib
netlib是pyRouterLib库的升级版,主要来实现对Cisco网络设备的SSH管理
基本满足了对网络设备管理的功能,但由于设备厂商差异,部分交换机指令(paging、enable等)存在差异。
因此在此基础上进一步封装,使得满足:1) 兼容国内主流网络设备(思科、华为、锐捷) 2) 实现自动no_paging, enable, save等管理功能 3) 读取配置文件,支持批量化执行配置命令
主要函数说明:
ssh_control.py
threading_ssh: 多线程入口,ssh执行命令的线程
main: 主函数入口ssh_client.py
ssh_connect: ssh建立连接
ssh_exec_commands: 执行多条命令
ssh_enable: 进入特权模式
ssh_unpaging: 关闭交换机的分页显示功能
ssh_disable: 退出特权模式
ssh_paging: 开启交换机的分页显示功能
ssh_save: 保存交换机配置
ssh_disconnect: 关闭SSH连接
ssh_control.py源码:
1 | import time |
项目地址:fivezh/netlib
- 考虑将这些功能规划、封装,打包形成一个开源库
- 兼容国内各主流交换机厂商(思科、华为、锐捷等)