Ubuntu 服务器:手动更改了我的用户的 /etc/passwd shell,现在无法登录

Ubuntu 服务器:手动更改了我的用户的 /etc/passwd shell,现在无法登录

我尝试通过直接编辑 /etc/passwd 文件将 shell 从 bash 更改为 tcsh。是的,愚蠢的举动。我想我已经吸取了教训。现在我无法通过 SSH 进入远程服务器。

有任何解决这个问题的方法吗?

PS:我仍然可以通过 SSH 隧道连接到 MySQL 服务器。有什么办法吗?

答案1

如果这是 VPS,请检查您的提供商是否提供某种单用户模式终端。大多数提供商都提供允许这种灾难恢复的功能。

答案2

该盒子上还有其他用户可以通过 SSH 登录吗?(必须使用 sudoers,除非您设置了 root 密码)除此之外,您还需要对盒子进行物理访问才能启动到单用户模式并重置密码或从备份中恢复...

答案3

如果您可以连接到 MySQL,我相信您可以运行以下命令来尝试获取 BASH 提示:

\! bash

我不确定如果 shell 设置不正确,它会如何工作,但值得一试。这可能还取决于您拥有的 MySQL 版本,但它肯定适用于 Ubuntu 上的 5.1.49。此外,也许这至少可以让您编辑文件:

\! vi /etc/passwd

答案4

vipw 不会检查您是否为 shell 提供了有效路径,或者 shell 是否存在。它所做的就是锁定正在编辑的文件,以防止其他人试图同时编辑该文件时发生损坏。

tcsh 可能未安装,或与 bash 位于不同的路径中;例如 /usr/local/bin。如果 OP 将 /bin/bash 作为 shell,而只是将 bash 更改为 tcsh,并且没有 /bin/tcsh... 在我的 Fedora 13 笔记本电脑上,我根本没有 tcsh。

此外,SSH 可能关心也可能不关心 /etc/shells。传统上,该文件由 ftp 检查,但不由 ssh 检查。在我的 Fedora 13 机器上,如果我从 /etc/shells 中删除 /bin/bash,我仍然能够通过 ssh 进入。

OP 的最佳选择是让具有远程计算机的 root 权限的人编辑 /etc/passwd。

相关内容