1、问题原因
在设备激活后,有时候会出现使用密码无法登录串口或telnet的现象。这个问题的根本原因是在使用passwd和shadow命令修改密码时,会生成中间文件,并在修改完成后删除该文件。然而,如果在修改密码的过程中发生了断电,导致中间文件未能被删除,下次再尝试修改密码时就会失败,使用新密码也无法登录串口。
2、解决方法
要解决这个问题,我们可以在设备启动时删除passwd和shadow的中间文件。这些中间文件的命名一般是passwd+和shadow+,但是如果passwd是一个链接文件,链接到其他名称的可执行文件,那么生成的中间文件名就不是passwd+和shadow+了,而是链接的可执行文件名加上"+"符号。
这里要强调pawwdd可执行文件的实体名称。我们需要确保删除了中间文件,以确保下次修改密码时能够成功,并且能够使用新密码登录串口。
3、如何判断系统已经设置过串口密码
背景:有时候希望设备没有激活的情况下,先随机生成一个密码,保证有方法能够进入串口,激活后根据用户设置的密码登录串口。
为了把激活状态跟随机生成密码解耦,可以通过检查是否已经设置过密码来决定是否随机生成密码。
下面是一个简单的检查密码示例:
root@NVTEVM:/$cat checkpwd.sh
#!/bin/sh
# 检查用户是否已设置密码
check_password_set() {
#/etc/shadow并不是唯一的,不同的系统可能是/etc/passwd
encrypted_password=$(grep "^$1:" /etc/shadow | cut -d: -f2)
if [ -n "$encrypted_password" ]; then
echo "用户 $1 已设置密码"
else
echo "用户 $1 未设置密码"
fi
}
# 检查 root 用户密码
check_password_set "root"
# 检查其他用户密码
check_password_set "username1"
check_password_set "username2"
# 添加其他用户检查...
root@NVTEVM:/$./checkpwd.sh
用户 root 已设置密码
用户 username1 未设置密码
用户 username2 未设置密码
如果你对上面的内容感兴趣,我建议你看一下我的另外一篇文章
1、Linux下passwd与shadow的关系
2、添加链接描述