我想我破坏了我的 Arch Linux VPS 上的 ncurses 安装。现在我无法使用 SSH 登录,出现以下错误:
$ ssh [email protected]
Last login: Mon Oct 26 08:56:59 2015 from 0.0.0.0
-bash: error while loading shared libraries: libncursesw.so.5: cannot open shared object file: No such file or directory
Connection to xyz.com closed.
我不太确定现在该怎么办。我有一个 tmux 会话在服务器上运行。是否有某种方法可以通过转发端口或其他方式从本地计算机连接到它?
答案1
感谢我的 VPS 托管提供商 (DigitalOcean),我能够启动到 Arch ISO,挂载我的系统分区,并执行系统升级,如下pacman
所示:
$ mount /dev/vda1 /mnt/arch
$ pacman --root /mnt/arch --cachedir /mnt/arch/var/cache/pacman/pkg --config /mnt/arch/etc/pacman.conf -Syyu
这解决了问题。
故事的道德启示:不要在 Arch Linux 上进行部分升级。
答案2
如果您的登录 shell 甚至无法启动,那么您就无法登录。客户端向服务器发送一个字符串,然后由服务器上的用户登录 shell 来解释该字符串。客户端无法告诉服务器“改为运行其他命令”。
这是一种安全机制:如果用户的 shell 可以执行的操作受到限制,那么用户就不能执行其不允许的任何操作。
如果您已阻止对系统上所有帐户的访问,则必须使用某种绕过正常登录的方法,例如物理访问或恢复控制台。
一些技巧:
- 进行维护时,请始终保持 root shell 打开,并且在测试一切正常之前不要将其关闭。
- 在具有 sudoer 权限的帐户上安装静态链接的 shell。我没有看到 Arch 预先打包的任何内容。Debian 有一些;您只需复制可执行文件并将其添加到
/etc/shells
. - 确保即使有些东西被破坏了,你也有办法扎根;将 root 的 shell 设置为
bash-static
或sash
类似的东西,或者设置一个账户(root 登录的另一种方式)。请记住,这sudo
也可能会损坏;您可能需要在 toor 帐户上设置一个随机生成的紧急密码(唯一且不需记忆)并写在一张纸上并保存在保险箱中。
答案3
你试过了吗:
ssh -t 用户名@主机名 /bin/sh
您也可以尝试通过 scp Missing libncursesw.so.5 复制到远程。