ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Cisco 2960交换机密码恢复详解:从原理到实操的完整指南

Cisco 2960交换机密码恢复详解:从原理到实操的完整指南 做网络运维这些年遇到过最尴尬的时刻之一就是交换机密码失守。这里的“失守”不是被攻破而是自己人把它忘了前任网工交接时没留密码设备上架第二天要调配置却发现进不去要么就是console口被同事改过恢复出厂又不甘心因为配置全在里面。Cisco 2960作为一代经典二层交换机在中小企业和园区接入层有着庞大的存量密码恢复几乎是每个网工迟早要面对的一课。这篇文章我把2960密码恢复的完整流程、背后原理、注意事项以及我踩过的坑一次性讲清楚照着做就行。1. 密码恢复前先把场景和条件摸清楚1.1 哪些情况必须走密码恢复流程不是所有“进不去设备”都需要密码恢复。先判断症状属于哪一种能进用户模式但enable进不了特权模式这说明用户态登录没问题只是缺少enable密码。这种情况不需要重启设备如果能拿到修改权限的时机可以尝试通过某些认证方式绕行但严格来说Cisco的enable secret无法直接读取或逆向如果没有任何后门还是得走恢复流程。console口和vty密码都丢失完全没法登录这才是最常见的密码恢复触发场景。设备能启动、能转发流量但人已经被拒之门外。设备二手收购回来完全不知道密码配置这种设备可能还带着旧配置直接恢复密码是最高效的接管方式。判断清楚属于哪一类很重要因为在不需要重启业务交换机的情况下尽量不要为了密码去断业务。1.2 恢复前必须准备好的东西Console线缆。老式DB9转RJ45的线或者USB转Console线都可以驱动要装好。终端软件。SecureCRT、PuTTY、Xshell、MobaXterm都可以我习惯用SecureCRT日志记录方便。接线方式Console线一端连交换机Console口一端连电脑COM口或USB转串口。软件里波特率设为9600数据位8停止位1无校验无流控。这个参数别搞错否则屏幕上全是乱码。提示Cisco 2960默认控制台参数就是9600/8-N-1。有些设备被改成19200甚至115200如果之前能登录过建议先把参数确认好再操作。另外操作前最好确认一下手里2960的硬件版本。老款WS-C2960-24TT-L等型号都带物理Mode键也就是面板上的“MODE”按钮这是进入恢复模式的关键。如果你的型号是2960-X或者2960-S流程大体相同但部分型号按键位置和指示灯提示略有差异需要提前查一下具体手册。2. 完整实操五步完成2960密码恢复2.1 进入ROMmon监控模式关闭交换机电源用Console线连接好打开终端软件等待输出。然后给交换机加电同时按住面板上的MODE键。具体时机很关键。我见过不少新手按了一两秒就松手结果设备正常启动到IOS了。正确的做法是加电的同时按住MODE键不松直到看到交换机系统状态灯STAT LED变成琥珀色或者闪烁时再松手。有些型号是等所有端口灯亮起时松开老手习惯盯着STAT灯的变化。成功进入后终端上会显示switch:这个“switch:”提示符就是ROMmon模式。如果屏幕上直接跳到系统的User Access Verification说明按键时机晚了需要重启重来。如果屏幕完全没反应检查Console线连接和串口参数。2.2 在ROMmon模式下初始化flash文件系统进入ROMmon后第一件事是让flash文件系统处于可读写状态switch: flash_init这一步会初始化flash老设备上会看到类似“Initializing Flash...”“flashfs[0]: 5 files, 1 directories”之类的输出。初始化完成后查看flash目录里的文件switch: dir flash:正常情况下能看到启动文件目录里面最关键的是config.text这就是交换机的startup-config配置文件。密码就藏在这个文件里。2.3 改名备份原配置文件我们并不需要删除config.text而是把它的文件名改掉这样交换机启动时找不到startup-config就会以“无配置”的出厂默认状态启动从而绕过密码验证。switch: rename flash:config.text flash:config.old执行完可以用dir flash:确认一下config.text已经变成config.old了。这里有一个很常见的坑命令里的flash:和文件名之间不要加不必要的空格且严格区分大小写。系统里文件名就是config.text写成Config.text找不到文件。2.4 启动交换机进入无密码特权模式switch: boot交换机开始加载IOS经过一段时间的启动后因为没有找到config.text系统会进入初始配置向导System Configuration Dialog也就是那句“Would you like to enter the initial configuration dialog? [yes/no]:”。在这里输入no然后回车系统会进入用户模式Switch输入enable进入特权模式Switch enable Switch#因为在无配置状态下启动默认的enable密码是空的直接就能进去。到这里密码恢复最难的部分已经完成了。2.5 回滚配置文件重设密码并保存现在进入特权模式但整个设备已经是出厂状态VLAN、端口配置、管理IP全都不在运行配置里。接下来把刚才改名的配置恢复回去Switch# rename flash:config.old flash:config.text然后把原来的配置加载到运行配置中Switch# copy startup-config running-config执行完这步设备会恢复原有的所有配置包括接口、VLAN、路由、管理地址等。注意在copy的过程中终端可能会弹出大量配置加载信息属于正常现象等它结束即可。此时enable密码仍然是旧密码因为它在配置里是个哈希值我们无法解出来只能覆盖它。在全局配置模式下设置新密码Switch# configure terminal Switch(config)# enable secret 你的新密码同时也建议把console、vty密码同步重设确保以后所有登录入口都受控Switch(config)# line console 0 Switch(config-line)# password 你的console密码 Switch(config-line)# login Switch(config-line)# exit Switch(config)# line vty 0 15 Switch(config-line)# password 你的telnet/ssh密码 Switch(config-line)# login Switch(config-line)# exit最后一步检查配置寄存器确认恢复启动时不会再次跳过配置Switch(config)# config-register 0x2102 Switch(config)# exit Switch# copy running-config startup-config至此密码已经重置完成设备会按照正常方式带原配置启动业务恢复。3. 原理拆解为什么这样操作能绕过密码3.1 配置寄存器才是真正的开关整个密码恢复流程的核心是配置寄存器Configuration Register。它是一个16位的寄存器值控制着路由器或交换机启动时的很多行为。Cisco设备上最常见的两个值0x2102正常启动读取startup-config加载配置。0x2142忽略startup-config配置启动后进入无配置状态。为什么0x2142是“忽略配置”因为0x2142相对0x2102多出了0x0040这一位也就是bit 6。在Cisco的配置寄存器定义中bit 6值0x0040的功能正是控制系统启动时是否加载NVRAM里的startup-config。bit 6为1时设备不去加载NVRAM配置相当于一层“失忆”开关。2960在ROMmon模式下执行boot时使用的就是当前寄存器值。但前面我们的操作并没有显式修改寄存器也没有执行confreg 0x2142命令为什么默认就会忽略config.text呢这就是MODE键的作用了。按住MODE键进入ROMmon模式本身会让设备在boot时临时以忽略NVRAM配置的方式启动效果等同于临时将寄存器值设置为0x2142。所以整个流程中你不必在ROMmon里手动敲confreg 0x2142直接改名配置文件后boot即可。不过有些老教程会让你在ROMmon下手动执行switch: confreg 0x2142这个命令同样有效而且适用于一些不靠MODE键进入ROMmon的设备。弄清楚原理后两种方式可以灵活运用。3.2 密码被存放在哪里为什么只能重置不能查看2960的enable密码存在startup-config文件中也就是flash中的config.text。enable secret存的是经过MD5算法处理的哈希值而不是明文。即使你把文件内容直接打印出来看到的也是一串类似$1$mERr$hx5rVt7rPNoS6wqb8s的哈希串逆向破解的成本极高。所以密码恢复的本质思路很简单既然无法逆向出密码就让设备在启动时不去碰这份配置文件进入无密码的默认状态然后再把配置文件加载回来并覆盖旧密码。这也解释了为什么我们只改文件名而不是删除文件——删了确实能进设备但VLAN、接口配置全没了恢复成本会大很多。3.3 加载配置时的顺序陷阱执行copy startup-config running-config时有个容易忽略的点这个命令是“合并”运行配置而不是“覆盖”。也就是说如果当前运行配置里存在某个接口配置而startup-config里没有对应配置这份残留配置可能不会自动消失。好在我们的操作流程里运行配置是初始无配置状态合并进来的是完整配置所以结果等同于旧配置整体生效一般不会出现残留冲突。个别情况下旧配置里包含某些当前软件版本不支持的命令复制过程中会被跳过或报错这是正常的只需事后检查一下关键配置是否都在。4. 恢复后的收尾工作与业务影响控制4.1 必须检查的收尾清单密码恢复完成后设备看起来恢复了正常但绝不能急着收工。我习惯按下面这个清单逐项检查配置寄存器是否已恢复为0x2102用show version最后一行查看。show running-config确认enable secret、console/vty密码已更新。设备重启一次验证能否正常加载config.text且无报错登录。检查所有管理通道Console、Telnet/SSH、SNMP、Web管理是否都按预期工作。检查关键业务配置是否完整比如VLAN、Trunk、端口所属VLAN、管理IP、默认路由、DHCP Snooping等。特别是管理IP和SSH配置如果之前是通过远程管理恢复后无法远程连接的情况很常见多半是管理VLAN或接口状态没恢复好。4.2 密码恢复对业务的影响有多大很多人问密码恢复会不会丢配置不会只要不误删config.text配置都会原样拿回来。但密码恢复有个绕不开的影响交换机会重启。重启意味着这台交换机上的所有二层流量会中断从几十秒到几分钟不等具体看设备规模和IOS加载速度。所以操作时机很重要。绝对不能在工作时间直接重启一台正在承载业务的接入交换机。最好提前申请变更窗口通知相关业务方。如果是堆叠环境里的成员交换机操作前还要确认清楚堆叠拓扑和主备关系否则我遇到过恢复完密码堆叠分裂、业务双主的情况处理起来非常头疼。另外有些环境下交换机连着语音网关、无线控制器、服务器集群的网卡绑定重启导致链路抖动可能引发一连串连带告警操作前最好把上下游设备的管理密码、应急方案都准备好。4.3 关于密码管理的事后补救恢复完密码事情并没有真正结束。密码之所以会丢失说白了是管理侧的问题。建议趁这次机会做三件事把设备密码统一纳入密码管理库避免员工离职导致密码失传。开启配置自动备份无论是用TFTP、FTP还是SNMP配置抓取保证每次变更后有据可查。有条件的话引入AAA认证服务器比如TACACS或RADIUS将管理认证集中化这样即使本地密码丢了通过AAA也能恢复设备访问权。5. 常见问题与排查技巧实录5.1 实操中遇到的典型问题速查表现象可能原因解决办法按住MODE键加电屏幕没有进入switch:按键时机不对或Console连接异常重新检查串口参数拔掉电源重试STAT灯变琥珀色再松手进入switch:后执行flash_init无反应flash文件系统未就绪多敲几次命令或重启重新进入ROMmondir flash:找不到config.text文件名大小写错误或原配置不在flash根目录用dir flash:全量输出排查注意大小写rename命令提示找不到文件flash:路径或文件名写错先用dir flash:确认准确文件名boot后提示找不到IOS镜像flash中的IOS文件缺失或损坏需要进一步恢复IOS通常用Xmodem或重新上传系统镜像copy startup-config running-config后端口全部shutdown配置加载过程中接口状态未恢复检查端口配置手动shutdown/no shutdown恢复远程管理仍然无法登录vty密码或SSH配置未恢复完整检查line vty配置和SSH key是否保留设置完密码重启后又回到无配置状态配置寄存器还是0x2142用config-register 0x2102恢复并保存5.2 几个值得单独说说的避坑经验第一关于MODE键的操作节奏。有同事告诉我他按MODE键几十秒都没反应后来发现是设备已经启动完成他一直在按但是没断电重启。正确操作一定是先断电再按住MODE键然后加电而不是在运行状态下按键。第二如果设备之前被配置过service password-encryption那么enable password不是secret在配置文件里会以加密形式存在同样是无法直接读取的。但enable secret优先级高于enable password只要重新设置了secret旧密码就会失效。第三恢复过程中如果终端屏幕出现乱码优先检查串口参数。设备如果之前被改过波特率ROMmon阶段可能还能按默认波特率显示但进入IOS后波特率可能立即变成非9600导致后续输出乱码。遇到这种情况可以在ROMmon下通过set命令查看环境变量或者在终端软件里多试几个常见波特率。第四很多人在执行copy startup-config running-config后会习惯性地执行write memory保存配置。如果你的寄存器还没恢复为0x2102此时保存会把0x2142也存进配置吗不会启动配置里不保存寄存器值寄存器值只在NVRAM单独区域靠config-register命令修改。但为了保险起见还是先把寄存器恢复成0x2102再保存避免后续重启异常。第五一些型号的2960如果flash空间很小改名config.old后虽然不占用额外空间但如果之前flash已满rename操作可能因为空间不足失败。这种情况建议先删除一个无关的旧备份文件再做rename但操作前务必确认删除的不是IOS镜像。第六如果你的2960启用了堆叠StackWise密码恢复会涉及到整个堆叠系统。通常需要把所有成员设备都断电然后按住主交换机的MODE键重新加电但具体流程可能因堆叠拓扑和版本不同有差异。没有把握的时候先查清楚该型号的堆叠恢复流程再动手。还有一点执行恢复过程中终端软件最好开启日志记录。密码恢复虽然操作步骤不多但每一条命令的输出都对后续排查有价值尤其是出问题时能回顾现场。SecureCRT里右键会话“Log Session”即可PuTTY也有类似功能。另外提醒一句操作完成后不要马上拔Console线。我习惯再挂10分钟观察一下看看设备会不会出现异常重启或者日志里有大量报错。有些老设备启动加载大配置时会比较吃力多等一会儿能避免误判。在没有TACACS等集中认证的环境下本地密码的管理尤其依赖文档化。恢复完密码后我会顺手在设备上设置一个较长的强密码并开启login block-for这类防暴力破解功能避免在密码重置空档期被外部扫描工具盯上。最后再分享一个我个人的小习惯。密码恢复做完我会把本次操作的完整输出保存一份连同设备的序列号、资产编号、操作时间一起归档。后续如果再遇到这台设备的问题这些记录就是最快的诊断线索。做了这么多年网络运维我最大的体会是密码恢复看似只是按几个命令真正考验的是对整个系统启动流程的理解以及对每一个操作背后风险的判断。设备可以重启配置可以找回但人心态不能乱这才是最重要的。
返回列表