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

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

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

PS。 我仍然可以通过SSH隧道连接到MySQL服务器。 任何方式来使用这个?

在这个VPS很可能的情况下,请检查您的提供商某种单用户模式terminal。 大多数提供允许这种灾难恢复的东西。

有没有其他用户可以通过SSHlogin? (必须在sudoers,除非你有一个root密码设置)除了你将需要有物理访问的盒子启动到单用户模式,并重置密码或从备份恢复…

如果你可以连接到MySQL,我相信你可以运行下面的命令来获得一个BASH提示:

 \! bash 

我不确定它是如何与您的shell设置不正确,但它是值得一试。 这可能也会根据你的MySQL的版本而有所不同,但是它肯定能在Ubuntu上的5.1.49上运行。 另外,也许这至less会让你编辑文件:

 \! vi /etc/passwd 

这不会帮助您login,但是您指定的shell需要位于/ etc / shells文件中,当然也可以安装。 ;)

正如其他人所说,你需要物理访问或某种单用户小程序,或让主机为您解决。

vipw不会检查是否给了一个shell的有效path,或者是否存在一个shell。 它所做的是locking正在编辑的文件,以防止其他人试图同时编辑文件时发生损坏。

有可能tcsh没有安装,或者与bashpath不同。 例如/ 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。