管几十台甚至上百台网络设备,纯手动登录每台去配置能累死。批量改个ACL、批量巡检接口状态、批量升级固件,手动做一遍下来半天就没了。Python加几个库就能自动化做这些事。今天说说怎么用Python批量管理H3C设备。
用什么库
Python管理网络设备最常用的库是Netmiko。它是Paramiko的封装,专门为网络设备做了优化。支持H3C的Comware系统,和华为、思科等主流厂商设备。
安装:
pip install netmiko
Netmiko的好处是API简单。几行代码就能连上设备执行命令。它处理了SSH连接的超时、重连、分页等网络设备特有的问题。
批量巡检脚本
最常见的需求是批量巡检。每天检查所有设备的CPU利用率、接口状态、告警信息。
import netmiko
from concurrent.futures import ThreadPoolExecutor
devices = [
{"ip": "10.1.1.1", "username": "admin", "password": "pass123"},
{"ip": "10.1.1.2", "username": "admin", "password": "pass123"},
# 更多设备...
]
def check_device(dev):
try:
conn = netmiko.ConnectHandler(
device_type="hp_comware",
ip=dev["ip"],
username=dev["username"],
password=dev["password"]
)
cpu = conn.send_command("display cpu")
interface = conn.send_command("display interface brief")
conn.disconnect()
return {"ip": dev["ip"], "cpu": cpu, "interface": interface}
except Exception as e:
return {"ip": dev["ip"], "error": str(e)}
with ThreadPoolExecutor(max_workers=10) as pool:
results = list(pool.map(check_device, devices))
for r in results:
print(f"{r['ip']}: {'OK' if 'error' not in r else r['error']}")
上面这段代码的关键点:device_type设为"hp_comware"(H3C Comware系统的Netmiko设备类型),用ThreadPoolExecutor做多线程并行巡检。10个线程同时工作,100台设备几分钟就巡完。
批量配置下发
巡检只是读操作,批量配置下发才是更复杂的需求。比如所有交换机都要加一条ACL规则。
def push_config(dev, config_cmds):
conn = netmiko.ConnectHandler(
device_type="hp_comware",
ip=dev["ip"],
username=dev["username"],
password=dev["password"]
)
output = conn.send_config_set(config_cmds)
conn.save()
conn.disconnect()
return output
config = [
"acl basic 2000",
"rule permit source 192.168.1.0 0.0.0.255",
"rule deny",
]

for dev in devices:
result = push_config(dev, config)
print(f"{dev['ip']}: {result}")
send_config_set方法会自动进入系统视图逐条执行配置命令。最后save保存配置。
注意批量配置下发要小心。错误的配置发到所有设备可能导致全网故障。建议先在一台设备上测试,确认无误后再批量推送。
配置对比
日常运维中经常需要检查设备配置和标准模板的差异。可以读取设备当前配置和模板文件做对比:
import difflib
def get_config(dev):
conn = netmiko.ConnectHandler(device_type="hp_comware", **dev)
config = conn.send_command("display current-configuration")
conn.disconnect()
return config
template = open("standard_config.cfg").read()
current = get_config(devices[0])
diff = difflib.unified_diff(
template.splitlines(),
current.splitlines(),
lineterm=""
)
for line in diff:
print(line)
有差异的行会标出来,哪些多了哪些少了清清楚楚。
和Ansible集成
Netmiko适合写灵活的自定义脚本,但如果团队需要标准化和可维护性,Ansible是更好的选择。
Ansible有网络设备模块,支持H3C Comware系统的模块有community网络集合里的相关模块。用Ansible的好处是YAML格式的Playbook可读性强,可以版本管理,团队成员上手快。
RESTful API
新一代H3C设备支持RESTful API,可以直接通过HTTP接口做配置和监控,不需要SSH。相比SSH+命令行的方式,API更结构化,返回JSON数据好处理。
不过目前不是所有H3C设备型号都支持RESTful API,主要在数据中心交换机和SDN控制器上支持。传统交换机和路由器还是得靠SSH。
安全注意事项
密码不要硬编码在脚本里。用环境变量或配置文件管理,配置文件加权限控制不提交到Git。
SSH密钥认证比密码更安全。用SSH密钥登录设备,密钥文件权限设为600。
操作日志要记录。脚本做的每个操作(哪台设备、什么时间、什么命令)写日志,出了问题能追溯。
变更前备份。脚本下发配置前先自动备份当前配置,万一发错了可以恢复。
做验证。下发配置后自动做验证(比如ping测试、接口状态检查),确认配置生效。
H3CIE-RS+的GB0-802笔试中网络管理模块包含Telnet/SSH考点。H3CSE-RS-NSO的GB0-392考试中也有SNMP和网络管理相关内容。Python网络自动化是运维进阶方向,不是认证考试直接考的内容,但在实际工作中价值很大。润天教育作为H3C钻石级授权培训中心,高级课程中有自动化运维的实验环节,千万级真机实验室可以搭建多设备环境做批量管理实验。