管几十台甚至上百台网络设备,纯手动登录每台去配置能累死。批量改个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",

]

Python自动化运维 H3C设备怎么批量管理

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钻石级授权培训中心,高级课程中有自动化运维的实验环节,千万级真机实验室可以搭建多设备环境做批量管理实验。