别再手动敲命令了
你有没有遇到过这种情况:每天早上第一件事,就是登录三四台服务器,挨个检查日志、重启服务、备份配置?干完一套流程得花二十分钟,还容易手抖输错命令。其实这些事完全可以交给脚本自动完成,这就是网络自动化的意义——把人从重复劳动里解放出来。
从小任务开始,别一上来就想全盘自动化
很多人一听说自动化,就想着搞个大项目,结果半途而废。更现实的做法是先挑一个最烦人的小任务开刀。比如你每周都要给交换机做一次配置备份,可以先写个简单的脚本,用 SSH 登录设备,执行 show running-config,然后把结果保存到本地文件。
下面是个用 Python + Paramiko 实现的小例子:
import paramiko
import datetime
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.1', username='admin', password='pass123')
stdin, stdout, stderr = ssh.exec_command('show running-config')
config = stdout.read().decode()
filename = f'backup_{datetime.datetime.now():%Y%m%d}.txt'
with open(filename, 'w') as f:
f.write(config)
ssh.close()
用版本控制管理你的配置和脚本
很多人备份配置就是扔进一个叫“配置备份”的文件夹,时间一长连哪份是最新的都分不清。更好的做法是把所有网络设备的配置文件和自动化脚本都放到 Git 仓库里。每次变更都有记录,还能对比差异。比如某天路由器出问题了,直接 git diff 就能看出上周改了哪些配置。
别在生产环境直接试脚本
有个朋友写了个批量修改 VLAN 的脚本,没在测试环境验证,直接在公司核心交换机上运行,结果整个办公网断了十分钟。正确的做法是先用模拟器(比如 GNS3 或 EVE-NG)搭个小型拓扑,或者找一台闲置设备做实验。哪怕只是用文本文件模拟输出结果,也比直接上真设备安全。
加点容错,别让脚本一出错就罢工
网络不稳定是常态。你的脚本不能因为某个设备暂时 ping 不通就直接报错退出。可以在代码里加个重试机制,比如三次尝试登录失败再标记为异常。同时把运行日志记下来,方便事后排查。比如在 Python 里可以用 logging 模块:
import logging
logging.basicConfig(filename='net_auto.log', level=logging.INFO)
try:
ssh.connect('192.168.1.1', timeout=5)
except Exception as e:
logging.error(f'无法连接 192.168.1.1: {e}')
用模板生成配置,避免手敲出错
新来一批接入交换机,每台都要配类似的 VLAN 和端口策略。与其一台台改 IP 和名称,不如用 Jinja2 模板写个配置模板,变量部分动态填充。比如:
interface Vlan{{ mgmt_vlan }}
ip address {{ mgmt_ip }}/24
name Management
hostname {{ device_name }}
这样只要准备个 CSV 表格,列出每台设备的名称和 IP,脚本自动生成完整配置,贴上去就行。
定期审查和清理旧脚本
半年前写的脚本,可能已经不适应现在的网络结构了。比如当时只支持 Cisco 命令,现在换了华为设备就不灵了。建议每季度花点时间看看哪些脚本还在用,哪些已经失效,及时更新或删除。不然仓库里一堆废弃代码,反而影响效率。