
1. 项目概述一次关于锐捷交换机密码安全的深度复盘最近在给一个客户做网络设备安全加固核心任务之一就是把所有锐捷交换机的明文密码给加密了。听起来是个常规操作对吧但就是这个看似简单的“加密”动作让我和团队前后折腾了大半天踩了好几个意想不到的坑。从配置命令不生效到SSH服务突然中断再到SNMPv3配置后监控平台失联几乎把能遇到的雷都踩了一遍。事后复盘发现问题的根源并不在于技术本身有多复杂而在于锐捷设备在不同型号、不同版本下对于密码加密的处理逻辑、命令行生效机制存在一些“默认”但文档里不会重点强调的细节。今天我就把这次踩坑的全过程、排查思路以及最终的解决方案整理出来这份避坑指南希望能帮你省下那几个小时的折腾时间。无论你是刚接触锐捷设备的网络新手还是有一定经验但想深化安全配置的老手这篇文章都会很有价值。我们会围绕“密码加密”这个核心深入到具体的配置命令、生效条件、不同服务如SSH、SNMPv3的关联影响以及如何验证加密是否真正生效。你会发现很多问题其实就出在一两个参数的顺序或者一个隐藏的“全局模式”切换上。2. 核心需求解析为什么密码加密不是一条命令那么简单首先我们得明确目标将锐捷交换机上的各类密码从明文存储改为密文存储以符合基本的安全规范。这通常涉及以下几种密码特权模式Enable密码进入特权执行模式的钥匙。远程登录密码包括Telnet和SSH的登录认证密码。本地用户密码在设备上创建的本地用户账号的密码。SNMP社区字Community String或SNMPv3用户密码用于网络管理协议认证。很多工程师的第一反应是这不就是一条service password-encryption命令吗确实这条命令是锐捷以及很多思科系设备上用于加密配置文件中显示密码的经典命令。但坑点恰恰从这里开始。坑点一service password-encryption的局限性这条命令的作用范围是有限的。它主要加密的是以下几种类型的密码启用密码enable password设置的注意不是enable secret。线路密码如line vty下配置的password。用户名密码username命令配置的。但它不加密以下内容使用enable secret命令设置的特权密码因为secret默认就是MD5加密的。SNMP的社区字。一些特定服务或特性下的密码参数。所以如果你的安全要求是“所有密码都不明文显示”那么仅靠这一条命令是远远不够的。你需要针对不同的密码类型采用不同的加密配置方法。坑点二配置的“生效时机”与“保存时机”这是本次踩坑的核心。锐捷交换机的配置分为“当前运行配置”和“启动配置”。你输入的命令会立刻影响运行配置但未必会立刻以加密形式“呈现”。有时你需要退出当前配置模式或者执行一个保存操作加密过程才会真正完成并显示在show running-config中。更棘手的是某些加密配置尤其是涉及SSH和SNMPv3的在修改后可能需要重启相关服务甚至设备才能完全生效否则会导致服务中断。核心需求总结我们的目标不仅仅是让配置文件中不显示明文而是要确保每种密码都采用了当前设备支持的最安全的加密方式如MD5 SHA-256。加密配置在修改后能立即且正确地生效不影响现有业务如SSH远程管理。配置能够被正确保存设备重启后所有加密状态依然有效。3. 不同密码类型的加密配置实操与避坑指南接下来我们分门别类看看每种密码具体的加密配置命令、步骤以及其中隐藏的“坑”。3.1 特权模式Enable密码加密这是最基础的部分。锐捷设备通常有两种设置特权密码的方式enable password设置明文密码。即使后续使用了service password-encryption其加密强度也较弱通常是Vigenere加密可逆。enable secret直接设置加密密码。这是推荐的方式它使用MD5哈希算法不可逆安全性高。正确操作与避坑! 进入全局配置模式 Ruijie enable Ruijie# configure terminal ! 错误做法使用明文密码依赖后续加密 Ruijie(config)# enable password MyPlainTextPass123 ! 正确做法直接使用secret命令系统会自动对其进行MD5加密 Ruijie(config)# enable secret MyStrongSecretPass456 ! 验证查看运行配置你会看到类似这样的行密码已是密文 Ruijie(config)# do show running-config | include enable secret enable secret 5 $1$Z/9H$Uc7LbNfzB2KQqT1X3Y5V6A注意enable secret的优先级高于enable password。一旦配置了secret设备将只认secret密码。5表示加密类型为MD5。永远不要使用enable password。3.2 远程登录Telnet/SSH密码加密对于通过VTY线路的远程登录密码通常在线路配置模式下设置。配置步骤! 进入VTY线路配置模式例如0-4 Ruijie(config)# line vty 0 4 Ruijie(config-line)# password VTY_Login_Pass Ruijie(config-line)# login Ruijie(config-line)# exit ! 此时查看配置password一行仍然是明文的 ! 需要启用全局密码加密服务 Ruijie(config)# service password-encryption ! 再次查看配置VTY密码已变为密文 Ruijie(config)# do show running-config | section line vty line vty 0 4 password 7 094F471A1A0A login避坑要点顺序问题一定要先配置password再启用service password-encryption。如果你先启用了加密服务再设置密码那么新设置的密码会直接以加密形式存储和显示。但反过来对已存在的明文密码需要执行一次service password-encryption来触发加密。加密强度service password-encryption产生的密文前面的7是弱加密。为了更安全应该采用本地用户认证usernamesecret结合aaa认证的方式并在线路下使用login local命令。这样用户密码将以MD5形式存储。Ruijie(config)# username admin secret MyAdminSecretPass Ruijie(config)# line vty 0 4 Ruijie(config-line)# login local ! 移除了 password 命令改用本地用户库认证3.3 SSH服务配置与密码加密的联动坑这是本次踩坑的重灾区。我们想要启用SSH并加密相关密码。基础SSH配置! 设置主机名和域名生成RSA密钥必需 Ruijie(config)# hostname Switch-01 Switch-01(config)# ip domain-name mycompany.local ! 生成RSA密钥对密钥长度建议2048 Switch-01(config)# crypto key generate rsa general-keys modulus 2048 ! 启用SSH服务并指定版本建议用版本2更安全 Switch-01(config)# ip ssh version 2 Switch-01(config)# line vty 0 4 Switch-01(config-line)# transport input ssh ! 只允许SSH登录禁用Telnet Switch-01(config-line)# exit ! 创建SSH专用用户使用secret加密密码 Switch-01(config)# username sshadmin secret SshAdminPass789巨坑出现SSH服务突然断开当我们按照上述配置并在VTY下配置了login local后尝试从远程SSH客户端登录。问题来了有时配置完成后现有的SSH连接会立刻断开并且无法重新连接。提示“连接被拒绝”或“认证失败”。排查与解决方案检查SSH服务状态show ip ssh或show ssh。确保SSH Server状态是Enabled。检查VTY线路配置确保transport input ssh已配置并且没有冲突的transport input telnet ssh等命令。login local必须正确指向已创建的用户。最关键的坑——RSA密钥与域名/主机名如果设备之前没有配置过域名ip domain-name或者主机名是默认的Ruijie那么生成的RSA密钥是基于这些默认信息的。当你修改了主机名或域名后原有的RSA密钥将失效导致SSH服务无法正常工作。解决方法在修改主机名或域名之前先删除旧的RSA密钥修改后再生成新的。! 错误顺序先改主机名SSH断连 ! 正确顺序 Ruijie(config)# crypto key zeroize rsa ! 删除旧密钥 Ruijie(config)# hostname Switch-01 Switch-01(config)# ip domain-name new.domain.com Switch-01(config)# crypto key generate rsa general-keys modulus 2048 ! 生成新密钥AAA认证模型冲突如果设备上配置了复杂的AAA认证、授权、记账可能会覆盖简单的login local设置。需要检查aaa new-model、aaa authentication login等命令确保认证列表正确引用了本地用户数据库。3.4 SNMPv3 密码加密配置详解SNMPv3提供了基于用户的安全模型USM支持认证和加密。其密码配置相对复杂但也是安全要求最高的部分之一。SNMPv3用户创建与加密配置SNMPv3密码涉及两个概念认证密码Authentication Passphrase和隐私加密密码Privacy Passphrase。它们不会以明文保存而是通过算法生成密钥。! 启用SNMP服务如果未启用 Switch-01(config)# snmp-server enable ! 创建一个SNMPv3用户。这是最关键的一步参数顺序和格式容易出错。 ! 语法snmp-server user 用户名 组名 v3 [auth {sha | md5} 认证密码] [priv {aes | des} 加密密码] Switch-01(config)# snmp-server user monitor snmp-group v3 auth sha AuthPass123 priv aes 128 PrivPass456命令拆解与避坑monitor: SNMPv3用户名。snmp-group: 用户所属的组名这个组需要事先通过snmp-server group命令创建定义访问权限。v3: 指定SNMP版本。auth sha AuthPass123: 指定认证算法为SHA认证密码为AuthPass123。密码长度有要求通常至少8字符。priv aes 128 PrivPass456: 指定隐私加密算法为AES-128加密密码为PrivPass456。踩坑实录密码复杂度不足锐捷设备对SNMPv3密码有最小长度要求通常为8位。如果密码太短命令会执行失败但报错信息可能不直观只是提示“无效输入”。务必使用足够长且复杂的密码。组Group未创建或权限不足必须先创建组并将用户关联到组。组的配置定义了该用户能访问哪些MIB视图具有什么权限只读read/读写write。! 先创建组关联一个只读视图例如‘default’是系统预定义的视图 Switch-01(config)# snmp-server group snmp-group v3 priv read default ! 然后再创建用户并加入该组配置后监控平台仍无法获取数据验证命令使用show snmp user查看用户配置详情确认认证和加密协议已正确显示。防火墙/ACL检查设备上是否有IP访问控制列表ACL阻止了SNMP端口UDP 161的流量。NMS配置确保监控平台如SolarWinds, PRTG, Zabbix上添加设备时选择的SNMP版本是v3并且用户名、认证/加密算法、密码与交换机上的配置完全一致包括大小写。这是最常出错的地方。4. 加密配置的验证与保存流程配置做完怎么验证加密真的生效了并且能持久化4.1 验证加密状态查看运行配置show running-config。这是最直接的方法。搜索password或secret字段。以7开头的密文是由service password-encryption生成的。以5开头的密文是MD5哈希如enable secret和username secret。SNMPv3的用户配置中不会显示密码明文只会显示用户名、组和使用的算法这是正常的说明密码已安全处理。测试功能连通性SSH从另一台PC使用PuTTY或OpenSSH客户端用配置的用户名和密码尝试登录。成功登录即证明SSH及密码认证生效。SNMPv3在局域网内找一台测试机使用snmpwalk或snmpget命令Linux上来自net-snmp包进行测试。# 在Linux测试机上执行 snmpwalk -v3 -u monitor -l authPriv -a SHA -A AuthPass123 -x AES -X PrivPass456 192.168.1.1 system如果能成功返回系统信息说明SNMPv3配置完全正确。4.2 保存配置的正确姿势这是另一个容易疏忽的点。所有配置都在运行内存RAM中必须保存到启动配置Startup Config中设备重启后才不会丢失。! 标准保存命令 Switch-01# write memory ! 或者使用等效命令 Switch-01# copy running-config startup-config保存前后的重要检查保存后务必使用show startup-config命令查看保存的配置。确认所有密码字段在启动配置中也是加密状态。对于SSH如果修改了RSA密钥或主机名/域名保存配置后建议进行一次重启或重启SSH服务如果支持命令的测试确保重启后SSH能正常启动。有些型号可能需要ip ssh server命令来显式启动服务。5. 常见问题排查与终极检查清单把我们在这次项目中遇到的所有典型问题汇总成一张排查表你可以像查字典一样快速定位问题。问题现象可能原因排查命令与解决步骤enable secret配置后特权密码不对1. 忘记已配置secret误用enable password。2. 复制粘贴密码时包含空格或特殊字符。1.show running-config | include enable确认使用的是secret。2. 通过Console口登录重新配置enable secret手动输入密码避免粘贴。SSH连接失败1. RSA密钥问题主机名/域名变更后未更新。2. VTY线路未正确配置transport input ssh。3. 防火墙或ACL拦截。4. 用户认证方式错误。1.show crypto key mypubkey rsa查看密钥按前文步骤重建。2.show running-config | section line vty检查配置。3.show ip access-lists检查是否有相关ACL。4. 确认是login local还是AAA认证并检查对应用户是否存在且密码正确。service password-encryption后密码仍显示明文1. 该密码类型不被此命令支持如SNMP社区字。2. 配置顺序错误先加密后设密码。1. 对于不支持的类型需使用其特定的加密命令如SNMPv3。2. 对于已存在的明文密码执行该命令后需要退出全局配置模式再进入或执行一次do show run刷新显示。有时需要保存配置后再查看。SNMPv3配置正确但监控端无法获取数据1. NMS端参数配置错误算法、密码大小写。2. 交换机上SNMP组权限配置不足。3. 网络可达性或端口被阻。1. 在NMS和交换机间逐字核对用户名、认证/加密算法、密码。2.show snmp group和show snmp user确认组权限和用户关联。3. 在监控服务器用snmpwalk命令行工具测试其输出更详细利于排错。配置保存后重启设备部分加密失效1. 某些配置如SSH依赖于启动阶段自动生成的密钥或证书但相关配置未保存完整。2. 设备版本存在Bug。1. 检查show startup-config是否包含SSH、SNMPv3用户等完整配置。2. 升级设备IOS到稳定版本。对于关键配置重启前在测试环境做一次验证。终极检查清单配置完成后请逐项核对[ ] 特权密码是否使用enable secret配置[ ] 远程登录是否已禁用Telnet (transport input ssh)[ ] VTY线路认证是login local吗对应的本地用户是否用username name secret创建[ ]service password-encryption是否已启用运行配置中是否还有明文password除了SNMPv3等[ ] SSH的RSA密钥是否是在当前主机名和域名下生成的[ ] SNMPv3用户密码长度是否8位认证/加密算法在设备与NMS端是否一致[ ] 所有配置是否已通过write memory保存show startup-config显示是否正常[ ] 是否通过了功能测试SSH登录、SNMP轮询最后我个人最大的体会是网络设备的配置尤其是安全相关的配置“顺序”和“上下文”的重要性常常被低估。很多命令不是孤立生效的它们之间存在依赖和覆盖关系。在锐捷交换机上进行密码加密这类操作最好的习惯是每进行一组相关配置如SSH全套立即进行功能验证每完成一个大的阶段如所有密码加密进行一次完整的配置保存和备份。不要等到所有命令敲完再测试那时问题会纠缠在一起排查起来会非常痛苦。另外一定要善用do show命令在配置模式下实时查看效果以及show running-config | section或| include来过滤查看关键配置这能帮你快速定位问题所在。