用 chsh -s 配错了 shell 该如何挽救?

配错了默认环境并不可怕,大不了再配回来就好了嘛。

显然,说这样话的人是没有故事的。


总之,如果你发现你的 vps 有一天突然无法登录了,没有报错内容是没有权限,但证书确定是正确的——那你就可能是在上次退出前配错了 shell。这时候即使你用 console 去登录,也会发现登录后一闪而过立即回到了登录界面——完蛋了,你心想,刚配好的环境又得重来一遍。

使用 chsh 切换 默认shell是一键很危险的事情,最好不要输错了,不然你就 gg。

这个时候,你可以尝试在 console 里发送 control + alt + delete 来重启,在一闪而过的 grub 启动界面,按方向键阻止自动启动(如果错过了,就再来一遍吧),把高亮移动到“高级选项”上,系统默认是英文,但这并不影响你选择,理论上都是第二个。

选择高级选项

在高级选项里也选中 第二个 “恢复模式”,然后按 e 来编辑参数:

选择高级选项里的恢复模式
编辑启动参数,注意不要写错

将上图参数里的 ro recovery nomodeset  改为 rw single init=/bin/bash

然后按 ctrl + x 来执行,这样你就进入到了 Linux 的单用户模式,在这里你不需要输入root密码即可获得root权限——当然,似乎在这里你的root密码也是失效的,总之,现在你可以改回默认的 shell 了——但不是用 chsh,这东西需要密码授权,然而你是永远不能输入正确密码的。

好在 Linux 把所有的配置都写在了配置文件里,我们直接编辑  /etc/passwd ,里面第一行就是 root 的信息:

不论你改成了什么,按照上面的代码,把 root 的 shell 改为  /bin/bash 即可恢复默认,如果你和我一样用 zsh,那就写  /bin/zsh ,保存后重启即可恢复正常。

“我觉得……我还可以,抢救一下?”

“用 chsh -s 配错了 shell 该如何挽救?”的2个回复

  1. 改 init 之后并不是单用户模式加的 single 也没有用(因为单用户模式是 init 系统的概念,然而它被你换掉了)。

    chsh 错 shell 就 root 登录过去改呗。我一般不使用 root 做常规操作的,也不会去改 root 的默认 shell,不然遇到问题(改错或者卸载或者配错 shell)就太坑了(服务器哪能轻易重启呢,尤其是个人和小团体使用的,没有备用服务)。

    1. 尴尬的就是如果你手贱把 root 的 shell 改成了一个不存在的路径,然后这台机器上还没有其他可登录账户………………
      这时候只需要重启一下不用重装……已经是很幸运的事情了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.