锐捷设备自动添加 SSH 用户脚本

锐捷设备自动添加 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 库简化了设备交互过程,同时针对锐捷设备的特性进行了专门优化。无论是作为日常运维工具,还是作为大型网络自动化系统的基础模块,都具有很高的实用价值。

通过掌握这类脚本的设计思路,网络工程师可以快速实现其他配置任务的自动化,显著提高工作效率并减少人为操作错误。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值