本文目录导读:

针对“批量配置OSPF”的需求,通常分为批量启用OSPF和批量配置OSPF策略(如修改Cost、Network、区域等),以下是几个实用且经过验证的脚本方案,适用于不同厂商设备。
利用Excel + Python(最通用,推荐)
适用于网络设备数量多、需要精确控制每个接口配置的场景。
思路: 用Excel维护设备列表和接口OSPF参数,通过Python脚本批量下发。
准备Excel文件 (ospf_config.xlsx)
| Device_IP | OSPF_Process | Area | Interface | Network_Prefix | Cost | Auth_Key |
|---|---|---|---|---|---|---|
| 0.0.1 | 1 | 0 | GigabitEthernet0/0 | 0.0.0/30 | 10 | cisco123 |
| 0.0.1 | 1 | 10 | GigabitEthernet0/1 | 16.1.0/24 | - | - |
| 0.0.2 | 1 | 0 | GigabitEthernet0/0 | 0.0.4/30 | 5 | cisco123 |
Python脚本 (使用Netmiko)
import netmiko
import pandas as pd
from netmiko import ConnectHandler
import getpass
# 读取Excel
df = pd.read_excel('ospf_config.xlsx')
# 去重获取设备列表
devices = df['Device_IP'].unique()
# 登录凭证(建议使用环境变量或Keyring)
username = input("Enter SSH username: ")
password = getpass.getpass("Enter SSH password: ")
# 遍历每台设备
for device_ip in devices:
device_config = {
'device_type': 'cisco_ios', # 根据实际设备修改
'host': device_ip,
'username': username,
'password': password,
'port': 22, # 或 830 (NETCONF)
}
# 获取该设备的所有配置行
device_rows = df[df['Device_IP'] == device_ip]
try:
conn = ConnectHandler(**device_config)
conn.enable() # 进入特权模式
config_commands = []
for _, row in device_rows.iterrows():
intf = row['Interface']
ospf_proc = int(row['OSPF_Process'])
area = int(row['Area'])
prefix = row['Network_Prefix']
cost = row['Cost']
auth_key = row['Auth_Key']
# 构建接口配置命令
config_commands.append(f"interface {intf}")
if pd.notna(cost):
config_commands.append(f"ip ospf cost {int(cost)}")
if pd.notna(auth_key):
# 简单认证示例(MD5更复杂)
config_commands.append(f"ip ospf authentication-key {auth_key}")
# 启用OSPF
config_commands.append("ip ospf {ospf_proc} area {area}".format(ospf_proc=ospf_proc, area=area))
# 发送全部配置
output = conn.send_config_set(config_commands)
print(f"✅ {device_ip} OSPF配置完成。")
# 可选:保存配置
# conn.save_config()
conn.disconnect()
except Exception as e:
print(f"❌ {device_ip} 失败: {e}")
print("批量配置结束。")
使用Ansible(运维标准方案)
适用于已有Ansible基础设施、需要合规审计的场景。
Ansible Playbook (ospf_bulk.yml)
---
- name: 批量配置OSPF
hosts: network_devices
gather_facts: no
vars:
ospf_config:
- { interface: "GigabitEthernet0/0", process: 1, area: 0, prefix: "10.0.0.0 0.0.0.3" }
- { interface: "GigabitEthernet0/1", process: 1, area: 10, prefix: "172.16.1.0 0.0.0.255" }
tasks:
- name: 配置接口OSPF参数
ios_config:
parents: "interface {{ item.interface }}"
lines:
- "ip ospf {{ item.process }} area {{ item.area }}"
loop: "{{ ospf_config }}"
执行命令
ansible-playbook ospf_bulk.yml -i inventory.txt --ask-vault-pass
纯脚本 & Expect(适合一次性或简单场景)
如果只有几台设备、配置逻辑简单(如所有接口加入area0),可用TCL/Expect脚本。
Shell/Expect脚本示例 (ospf_bulk.exp)
#!/usr/bin/expect
set user "admin"
set pass "cisco"
set enable_pass "cisco123"
# 从文件读取设备IP
set f [open "devices.txt" r]
while {[gets $f ip] != -1} {
spawn ssh $user@$ip
expect "Password:"
send "$pass\r"
expect ">"
send "enable\r"
expect "#"
send "configure terminal\r"
expect "(config)#"
# 将所有接口加入OSPF area 0(适用于简单场景)
send "interface GigabitEthernet0/0\r"
expect "(config-if)#"
send "ip ospf 1 area 0\r"
expect "(config-if)#"
send "interface GigabitEthernet0/1\r"
expect "(config-if)#"
send "ip ospf 1 area 0\r"
expect "(config-if)#"
send "end\r"
expect "#"
send "write memory\r"
expect "#"
send "exit\r"
close
}
close $f
需要特别注意的坑(实用建议)
-
network命令 vsip ospf命令- 老式设备:
router ospf 1→network 10.0.0.0 0.0.0.3 area 0 - 新式设备:建议在接口下直接执行
ip ospf 1 area 0,更精确、不易出错。 - 脚本中建议统一使用接口模式,避免wildcard-mask写错。
- 老式设备:
-
配置回滚
- 批量前,先用
show running-config | include ospf备份。 - Python脚本中可增加
conn.send_command('show run | include ospf')并保存到文件。
- 批量前,先用
-
认证处理
OSPF认证密码在脚本中不要硬编码,推荐使用环境变量、Hashicorp Vault或Ansible Vault。
-
设备差异
- 华为:
ospf 1→area 0.0.0.0→network 10.0.0.0 0.0.0.3(wildcard mask) - Juniper:
set interfaces ge-0/0/0 unit 0 family inet address 10.0.0.1/30→set protocols ospf area 0 interface ge-0/0/0.0 - 如果厂商混杂,需要在
device_type上做条件判断。
- 华为:
总结推荐
| 场景 | 推荐方案 |
|---|---|
| 一次性批量配置50台以下 | 方案一(Python + Excel) |
| 企业级、持续运维、合规 | 方案二(Ansible) |
| 只有4-5台、纯文本操作 | 方案三(Expect) |
| 已有CMDB(Excel/数据库) | 方案一(最灵活,可扩展) |
建议:先拿1台设备测试脚本,确保show ip ospf neighbor能看到邻居建立成功,再全量执行。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播