
这阵子巡检机房照例 SSH 跳上核心区的华为 CE8800输完密码回车终端里除了正常的命令行之外还压着一行带警告色的提示Warning: The password will expire in 21 days. The password needs to be changed, Continue? [Y/N]。说实话这种提示我做运维这几年已经碰过很多次了但每次处理方式都不一样有人直接按 Y 把密码改了有人按 N 假装没看见还有同事在群里问“这个要不要管”。这条提示不是故障也不是设备被入侵了。它是华为交换机对本地用户密码生命周期做的一次例行检查告诉你当前账号的密码还剩 21 天有效期。如果你不管它到期之后这个账号可能直接登不进去尤其是远程管理环境下真到那一步就只能跑 console 口或者走带外通道了。这篇就把这件事讲透提示是怎么触发的、当场应该怎么处理、如何调整策略让它不再频繁骚扰你、以及批量管理一堆交换机时的操作思路。新入行的网络工程师可以按步骤照做老手也可以看看我在批量场景里踩过的几个坑。1. 这条Warning的来龙去脉先搞懂密码老化机制1.1 为什么提示偏偏是21天华为 CE8800 默认的密码过期策略里系统会提前一段时间对用户发出提醒。21 天这个数字本质上就是“剩余有效期阈值”。当密码距离彻底过期还剩 21 天时每次登录都会带上这条 Warning不是偶然也不是设备时钟出问题了。你可以把它理解成手机话费余额不足时的提醒短信运营商不会等你欠费停机才告诉你而是在余额低于某个阈值时就开始提醒希望你有足够的时间去充值。交换机也同理它希望在你还能正常登录、还有操作余量的时候把密码换掉而不是某天早上突然告诉你“密码已过期登录被拒绝”。这条提示只对本地用户生效。如果你的设备走的是 RADIUS、TACACS 或者 LDAP 这类远端认证密码策略由认证服务器统一下发设备本身不做老化判断自然也就不会弹这条 Warning。所以当你发现同批次设备里有的提示、有的不提示先别怀疑配置不一致很可能是一台走本地认证、另一台走了远端认证。1.2 触发条件拆解本地认证和全局策略缺一不可具体到我手上这台 CE8800触发条件可以拆成三块登录用户名是设备本地用户不是远端认证用户。全局密码策略里启用了过期时间。当前用户密码剩余有效天数小于等于提醒阈值。这三者缺一不可。华为企业级交换机默认都会给本地账号设置密码有效期通常以一个全局策略的形式存在。管理员可以通过命令行查看和调整。你在系统视图下敲display password-policy就能看到当前策略的完整定义过期天数、提醒时间、最小密码长度、复杂度要求、历史密码记忆条数、失败锁定阈值等等。很多同事第一次看到这条输出时会被一堆参数吓到其实核心就几项。我后面第三章会专门讲怎么改、怎么调。1.3 选Y和选N分别会发生什么提示行末尾的Continue? [Y/N]是设备在等你做出选择。这两个选项的行为差异很关键选择后续动作实际影响Y立刻进入密码修改流程要求输入旧密码、新密码并确认密码被更新本次会话通常需要重新登录N跳过修改直接进入命令行界面密码不变但每次登录都会再次出现同样的 Warning很多人习惯性按 N觉得不影响干活就行。短期看确实不影响命令执行但如果不做记录下次登录又看到同样提示循环往复很容易在真正过期那天被卡在门外。更麻烦的是如果这个账号是值班共用的你按了 N下一个接班的人也不知道密码快过期了等到过期后才在群里喊“登不上了”。所以我的建议是只要条件允许第一次看到提示就直接按 Y 把密码改掉别拖。如果实在不方便当场改比如正在变更窗口期不想额外增加风险至少要记录下来在日历或者运维台账里建一个提醒事项。2. 当场处理用一次登录会话把密码改掉2.1 按Y之后的完整交互流程当你看到 Warning 后输入 Y设备会进入一个交互式改密流程大致如下Warning: The password will expire in 21 days. The password needs to be changed. Continue? [Y/N]:y Please input old password: Please input new password: Please confirm new password: Info: The password was changed successfully.注意几个细节输入旧密码时屏幕不会回显任何字符连星号都没有这是正常行为别以为自己键盘坏了。新密码不能太简单。华为的默认复杂度策略要求密码至少 8 位并且包含大写字母、小写字母、数字中的至少两类部分强策略环境还要求包含特殊字符。新密码不能和当前密码一样也不能是历史密码。华为默认会记住最近几次的密码记录你如果试图用三个月前的老密码大概率会被拒绝。整套流程走完设备会提示修改成功。但这时候还没完你当前的 SSH 会话通常会失效需要重新登录一次。这不是故障是设备在强制你用新凭据重新认证防止有人在改密过程中一直赖在旧会话里。2.2 如果已经按N进入系统如何手动补改有时候你下意识按了 N等反应过来已经坐在命令行界面里了。不想重新断开再登一次的话可以直接在当前会话里手动重置当前账号密码。以 VRP8 平台为例管理员可以这样做system-view local-user admin password irreversible-cipher NewPass123这里有几个坑要注意admin要替换成你自己的登录用户名irreversible-cipher的意思是密码以不可逆密文形式存储比老的cipher方式更安全新密码里如果包含$、!、单引号这类特殊字符在某些 shell 环境下可能会被解释器截断或转义导致你实际设置的密码和想设置的不是同一个。如果执行时提示命令不存在或者参数错误大概率是版本差异。华为 CE 系列有些命令需要在aaa视图下执行可以先进去再敲一遍命令。拿不准的时候敲命令时打一个问号让设备自己提示你参数格式。2.3 改完密码之后立刻会发生的几件事密码修改成功不是终点后面这几件事我强烈建议你在改密前就提前想好第一当前 SSH 连接几乎一定会断。如果你正开着多个窗口同时操作设备按完 Y 之后其它窗口也会在下次交互时被踢掉因为服务端的会话认证已经失效了。第二如果你有网管平台、监控系统、配置备份工具在定时用这个账号登录设备它们可能在你改完密码的那个晚上全部报一次“认证失败”。不是网络出问题了是它们手里还攥着旧密码。改完密码要第一时间同步更新运维系统里的凭据库。第三如果是共用账号改完之后一定要在值班群或者交接文档里说一声。否则明天早上另一个同事用旧密码登录失败大概率会先怀疑设备挂了。3. 治本操作调整密码策略与批量变更3.1 先看策略display password-policy 输出怎么读处理完单台设备的密码之后更值得做的一件事是把密码策略本身看一遍。登录设备进入系统视图执行display password-policy输出里常见的几项包括密码有效期天数决定密码多久必须换一次。提醒阈值天数就是前面说的 21 天这个数。最短密码长度默认通常是 8。复杂度和历史记忆条数用来防止密码复用。账号失败锁定阈值连续输错几次锁定账号。不同版本输出的字段名会略有出入但核心逻辑一致。你把这一份输出看懂后面配置策略就心里有谱了。3.2 调整或关闭过期提醒的正确姿势如果你觉得 21 天提醒太频繁可以把过期天数调长也可以修改提醒的提前量。以我手头这台 CE8800 为例system-view password-policy expire 180这条命令的意思是密码有效期改为 180 天设备会重新计算每个用户的过期时间。如果你希望彻底不做过期强制可以使用undo password-policy expire等价于关闭老化策略。但我在生产环境里一般不推荐直接关闭除非你有一套非常完善的外部强认证体系在兜底否则本地账号的密码一旦失去过期约束时间长了非常容易变成常年不换的“僵尸凭据”。对于大多数中小团队我的建议是把有效期设为 90 到 180 天提醒阈值保持默认。这个节奏既不会让运维人员频繁改密到烦也不会让密码在网络上滞留太久。3.3 多台设备批量处理expect脚本实例如果你手上有几十台 CE 系列交换机挨个登录去按 Y 改密码会非常崩溃。这时候可以用 expect 脚本模拟交互过程把改密动作自动跑一遍。下面是我实际用过的脚本骨架#!/usr/bin/expect set timeout 15 set host [lindex $argv 0] set newpass [lindex $argv 1] spawn ssh admin$host expect { *password* { send OldPass123\r } timeout { exit 1 } } expect { *Continue?* { send y\r } * {} } expect { *old password* { send OldPass123\r } } expect { *new password* { send $newpass\r } } expect { *confirm* { send $newpass\r } } expect eof使用时传两个参数设备 IP 和新密码。这个脚本只演示了交互流程真正上线前你至少还要处理三件事检查密码修改成功后设备是否返回changed successfully。修改后重新用新密码 SSH 登一次验证可用。把脚本里的旧密码去掉改用交互输入或者密码管理工具注入避免明文密码留在脚本文件里。如果你更习惯用 Pythonparamiko 或 netmiko 一样可以完成。原理相同都是识别设备交互提示词然后发送对应的输入。提醒一点不同 VRPV 版本的提示语可能有微小差异比如Please input old password和Please input old password:的区别脚本里的匹配关键字尽量写模糊一点用*old password*这种形式别写全串精确匹配。4. 踩坑记录比密码过期更麻烦的几个连带问题4.1 改完密码被踢下线这不是故障但很吓人我第一次处理这类提示时按 Y 改了新密码设备弹了个The password was changed successfully紧接着 SSH 会话就断了。当时心里“咯噔”一下以为是网络中断或者设备出问题了。重新登录试了一次才发现只是设备强制要求新会话重新认证。这个行为本身是安全设计但你得提前告诉团队里的人尤其是新手。否则他们会在某次改密之后以为把设备搞挂了慌慌张张发起工单实际上虚惊一场。4.2 脚本和备份比人更早发现密码失效这个坑我印象极深。某次改完一批设备的密码第二天早上监控平台连续弹出十几个“登录失败”告警。排查半天才发现是配置备份任务还在用旧密码访问设备。人没发现密码改了但脚本第一个发现了。所以改密不是单点操作它是一个链式动作。设备上的密码换了意味着所有依赖这个凭据去连接设备的系统都要跟着更新监控探针、备份工具、拨测脚本、堡垒机账号同步、网管平台采集器……这些隐性依赖往往不在一张拓扑图上非常容易遗漏。我的经验是在中大型环境里任何一次设备账号改密都要当作一次变更单来处理先在文档里把所有依赖方列出来再动手。4.3 新密码复杂度不达标反复改不成功有一次我按 Y 进入改密流程新密码输了个Passw0rd设备直接提示不符合复杂度要求。我心里还嘀咕“这不挺复杂的吗”结果发现密码历史里已经用过这个密码了华为默认会记住最近几次历史记录不能重复用。另外新密码不能与用户名相同或包含用户名连续字段。比如用户名是admin新密码就不要出现admin123这种组合。这些规则不同版本有差异最省事的办法是改造密码时直接给一个足够长的随机字符串避免跟明文可读的单词粘上边。4.4 管理员账号过期只能跑 console 的尴尬如果过期的是管理员账号而你又只有远程 SSH 这一条路那就比较被动了。设备不会因为你之前按了两次 N 就网开一面密码一旦过期认证直接失败SSH 这条路就断了。这时候唯一的办法是 console 口接进去或者走带外管理通道。我在实际运维里遇到过一回设备在一个无人值守的分机房我人在办公室console 口根本够不到。后来是让现场同事拿笔记本接串口线才把问题解决。那次之后我养成了一个习惯任何核心设备的管理账号要么把有效期拉长要么确保至少有一个非本地账号路径能登进去做应急。别让所有鸡蛋放在一个篮子里。5. 运维视角让“密码即将过期”变成可控信号5.1 建一张真实的密码台账密码过期提示本质上是一个生命周期信号它最理想的状态是被纳入例行运维而不是每次以“突发问题”的姿态出现在你面前。我现在的做法是把每台核心设备的账号信息维护在一张表里字段包括设备名、管理 IP、登录账号、上次改密日期、密码过期日、当前策略下的剩余天数、责任人。每次改完密码就在台账里更新一行。不需要搞什么复杂的 CMDB 系统一个共享表格就够了。关键是要有人维护而且要跟设备实际情况对得上。这样做的好处是你不必等设备弹 Warning 才知道密码快过期了。每个月月初翻一遍台账哪台设备下个月到期一目了然提前就把密码轮换掉。5.2 把登录Warning变成巡检信号除了台账还可以在巡检环节里主动抓取这条 Warning。最简单的办法是在自动化巡检脚本里加一个判断SSH 登录设备后如果输出里匹配到password will expire或者password needs to be changed就把这台设备和剩余天数记下来汇总到当天的巡检报告里。这种方式不依赖设备日志因为那条 Warning 是终端交互提示不一定会上送 syslog但脚本登录时它一定会出现。把被动提醒变成主动发现运维的主动权就有了。设备多的时候这个信号还能用来评估整个网络的“密码健康度”。5.3 安全与效率的平衡过期策略别一关了之我也见过不少团队被这类提示烦到不行最后直接undo password-policy expire一劳永逸。说实话我能理解但不太支持。本地账号如果彻底放弃过期策略等于把密码安全寄托在“大家都会自觉定期改密码”这个假设上而这个假设在现实里几乎不成立。如果觉得频繁改密影响效率更务实的做法是把有效期调到一个不那么打扰的区间90 天是很多团队能接受的水平180 天算平衡得比较好。如果公司安全规范有明确要求那就按规范走。与此同时把核心设备登录尽量收敛到堡垒机或跳板机让设备本地账号只作为应急通道存在这样即便本地密码策略被放宽整体风险也是可控的。我个人的体会是这类登录提示本质上是一个“好脾气”的功能它在给你充足的时间去做一件本来就应该定期做的事。真正造成麻烦的从来都不是提示本身而是我们把它当成噪音、一次次按 N 逃避的那段时间。把密码轮换变成季度例行操作之后我反而觉得这 21 天提示挺省心的——设备在替你盯着那些你容易忘记的细节。