锐捷设备自动添加 SSH 用户脚本:从实现到优化的全解析
在网络设备管理中,批量或自动创建 SSH 用户是一项常见需求。本文将详细解析一个基于 Netmiko 的锐捷设备 SSH 用户自动创建脚本,涵盖实现思路、关键技术点和优化细节,帮助网络工程师快速掌握网络设备自动化配置的核心方法。
脚本功能概述
这个 Python 脚本专为锐捷 (Ruijie) 网络设备设计,实现了以下核心功能:
- 自动登录锐捷设备(支持特权模式切换)
- 创建指定用户名、密码和权限级别的 SSH 用户
- 限制用户仅通过 SSH 登录(增强安全性)
- 自动保存配置并验证保存结果
- 完善的错误处理和状态提示
脚本采用模块化设计,代码结构清晰,便于维护和扩展,适合作为网络自动化运维的基础组件。
技术选型与环境准备
核心库:Netmiko
脚本基于 Netmiko 库实现,这是一个专门用于网络设备 SSH 连接和配置的 Python 库,相比 paramiko 等通用 SSH 库,它具有以下优势:
- 内置各厂商设备的命令集和交互逻辑
- 自动处理特权模式切换、配置模式进入等设备特有操作
- 简化命令发送和输出处理流程
- 提供丰富的异常处理机制
安装方法:
pip install netmiko
脚本核心代码解析
1. 设备信息配置
device_info = {
'device_type': 'ruijie_os', # 指定设备类型为锐捷OS
'ip': '1.1.1.1', # 设备IP地址
'username': 'admin', # 管理员用户名
'password': 'Ruijie!@#0752', # 管理员密码
'port': 22, # SSH端口
'secret': 'Ruijie!@#0752', # 特权模式密码
'global_delay_factor': 1, # 全局延迟因子,控制命令执行间隔
'session_log': 'ruijie_auto_config.log' # 会话日志保存路径
}
这段配置定义了连接设备所需的全部信息,其中device_type指定为ruijie_os是关键,确保 Netmiko 使用针对锐捷设备优化的交互逻辑。session_log参数用于记录完整的交互过程,便于调试。
2. 新增用户信息定义
new_username = 'admin_user' # 新用户名
new_password = 'P@ssw0rd!23' # 新用户密码
privilege_level = 7 # 权限级别
这里定义了要创建的用户信息,权限级别 7 表示该用户拥有较高的操作权限(锐捷设备通常 0-15 级,15 级为最高)。
3. 主逻辑与设备交互
with ConnectHandler(**device_info) as conn:
conn.enable() # 进入特权模式
conn.config_mode() # 进入配置模式
print(f"已连接设备 {device_info['ip']},开始创建账号 {new_username}...")
# 配置命令集
create_cmds = [
f"username {new_username} password 0 {new_password}",
f"username {new_username} login mode ssh",
f"username {new_username} privilege {privilege_level}"
]
output = conn.send_config_set(create_cmds)
使用with语句创建连接上下文,确保连接自动关闭。通过enable()和config_mode()方法分别进入特权模式和配置模式,这两个方法会自动处理锐捷设备的特定提示符和交互逻辑。
send_config_set()方法用于批量发送配置命令,相比逐条发送命令更高效。
4. 配置保存与结果验证
# 保存配置并处理可能的确认提示
save_output = conn.send_command(
"write memory",
expect_string=None,
read_timeout=20
)
# 处理保存时的确认提示
if "Y/N" in save_output or "y/n" in save_output:
save_output += conn.send_command("Y", expect_string="#", read_timeout=20)
# 验证保存结果
if "Building configuration..." in save_output and "[OK]" in save_output:
print(f"✅ 配置保存成功(检测到 [OK] 标识)")
# 其他验证逻辑...
这部分是针对锐捷设备的重要优化:
- 延长超时时间应对大型配置保存
- 处理可能出现的确认提示(Y/N)
- 检查锐捷特有的保存成功标识
[OK] - 兼容其他版本的成功提示信息
5. 异常处理机制
except NetMikoTimeoutException:
print(f"❌ 连接失败:无法访问设备 {device_info['ip']}")
except NetMikoAuthenticationException:
print(f"❌ 认证失败:管理员账号或密码错误")
except Exception as e:
print(f"❌ 执行出错:{str(e)}")
通过捕获特定异常,提供更精准的错误提示:
- 超时异常:通常表示网络不可达或设备未响应
- 认证异常:明确指出账号密码问题
- 通用异常:捕获其他未预料的错误
脚本优化亮点
1.** 厂商适配优化 **:针对锐捷设备特性调整命令集,使用login mode ssh限制登录方式,比通用命令更精准。
2.** 保存机制增强 **:不仅发送保存命令,还处理确认提示并验证多种成功标识,解决了不同固件版本返回信息不一致的问题。
3.** 日志记录 **:通过session_log参数记录完整交互过程,便于问题排查。
4.** 用户体验优化 **:使用 emoji 标识操作状态(✅成功、❌失败、⚠️警告),输出信息结构化,一目了然。
5.** 超时控制 **:为配置保存操作单独设置较长超时,避免大配置情况下的超时误判。
使用与扩展建议
1.** 批量操作 :可扩展为接收 IP 列表,实现多设备批量配置2. 密码安全 :建议通过环境变量或加密文件获取密码,避免明文存储3. 参数化 :可将用户信息改为函数参数,增强复用性4. 权限控制 :根据实际需求调整privilege_level,遵循最小权限原则5. 前置检查 **:可添加用户存在性检查,避免重复创建
总结
这个脚本展示了网络设备自动化配置的最佳实践,通过 Netmiko 库简化了设备交互过程,同时针对锐捷设备的特性进行了专门优化。无论是作为日常运维工具,还是作为大型网络自动化系统的基础模块,都具有很高的实用价值。
通过掌握这类脚本的设计思路,网络工程师可以快速实现其他配置任务的自动化,显著提高工作效率并减少人为操作错误。

1704

被折叠的 条评论
为什么被折叠?



