我恢复了服务器并将 root 密码重置为新密码,因为由于某种原因,原始密码无法被识别。它仍然拒绝接受 root 的 ssh 密码。经过进一步研究,它似乎可能是损坏的 etc/passwd 文件。
Parallels 指出运行此命令:
cat /etc/passwd | grep ^root | hexdump -c
文件末尾应以 \n 结尾,但我的以 \r \n 结尾。我以 /bin/bash privs 用户身份检查了该文件。现在问题来了。我无法检查根目录下的 passwd 文件。有任何想法吗?
我知道有 2 个 etc/passwd 位置。 1 个为系统上分配的每个用户,第 2 个位于 etc 根区域中。谢谢
答案1
您已编辑该文件/etc/passwd
使用 Windows 编辑器或配置为生成 Windows 文件的编辑器编辑了该文件。不要那样做。 Windows 使用两个字符序列 CR-LF 来表示越线,而 Linux 和其他 UNIX 系统仅使用 LF 并将 CR 视为恰好位于该行最后的普通字符。一般来说,使用Linux编辑器在Linux上编辑文件,或者如果您使用Windows编辑器,请确保以Linux换行符格式保存文件。
您现在的问题不是密码无效。您已成功通过身份验证。在登录过程结束时,login
或su
或sshd
所做的最后一件事是运行 shell,如 中记录的那样/etc/passwd
。恰巧 shell 是 的最后一列/etc/passwd
,所以现在 root 的 shell 已设置为/bin/bash␍
其中␍
有 CR 字符。
您需要安排创建此文件或编辑/etc/passwd
.对于其中任何一个,您都需要 root 访问权限。由于您已有效禁用 root 帐户,因此您将需要物理访问权限。
答案2
它接受来自控制台的密码吗?您可能已经升级了系统并且您的 sshd_config 可能已被替换。默认情况下,通过 ssh 进行 root 访问是禁用的。顺便说一句,密码不是存储在/etc/passwd中,而是存储在/etc/shadow中。唯一受影响的是你的登录 shell,它是 /etc/passwd 的最后一个字段,为什么你不编辑该文件并删除 \r?您的用户在 sudoers 列表中吗?如果是这样,请执行sudo bash
并编辑该文件。
答案3
登录后尝试以下操作:
su root
然后您以 root 身份登录。当此方法有效时,您可以编辑 passwd 文件。
答案4
仅供参考——如果有人在搜索中遇到这个。
您不能su
或sudo su -
使用损坏的密码文件。它会说No such shell bash^M
。
但您可以运行sudo su -s /bin/bash
来指定要运行的备用 shell。或者su -s /bin/bash
如果您有 root 的密码。