由于 shell 加载失败,SSH 连接关闭

由于 shell 加载失败,SSH 连接关闭

我使用 OpenSSH 运行 FreeBSd。我设置了一切,通过 SSH 的连接运行正常。然后我决定删除一些未使用的端口,显然我卸载了 zsh 使用的端口。

当我登录时,我得到以下信息:

~ # ssh [email protected]
Password:
Last login: Wed Nov  7 21:56:26 2012 from 192.168.1.52
FreeBSD 9.0-RELEASE (GENERIC) #0: Tue Jan  3 07:15:25 UTC 2012

Welcome to FreeBSD!

Before seeking technical support, please use the following resources:

o  Security advisories and updated errata information for all releases are
   at http://www.FreeBSD.org/releases/ - always consult the ERRATA section
   for your release first as it's updated frequently.

o  The Handbook and FAQ documents are at http://www.FreeBSD.org/ and,
   along with the mailing lists, can be searched by going to
   http://www.FreeBSD.org/search/.  If the doc package has been installed
   (or fetched via pkg_add -r lang-freebsd-doc, where lang is the
   2-letter language code, e.g. en), they are also available formatted
   in /usr/local/share/doc/freebsd.

If you still have a question or problem, please take the output of
`uname -a', along with any relevant error messages, and email it
as a question to the [email protected] mailing list.  If you are
unfamiliar with FreeBSD's directory layout, please refer to the hier(7)
manual page.  If you are not familiar with manual pages, type `man man'.

Edit /etc/motd to change this login announcement.

Shared object "libiconv.so.3" not found, required by "zsh"Connection to 192.168.1.56 closed.

问题是我没有显示器,也没有键盘(现在)来快速解决问题......

我尝试强制加载不同的 shell >强制 SSH 使用特定 shell

不起作用,因为我得到:

~ # ssh [email protected] /usr/local/bin/sh << EOF
chsh -s /usr/local/bin/bash
EOF
Password:
Shared object "libiconv.so.3" not found, required by "zsh"%    

有什么办法可以在没有键盘和显示器的情况下解决这个问题吗?

答案1

我曾经犯过同样的错误。我怀疑您是否能够获得远程更改 shell 所需的 root 访问权限。另一个不太可能的选择是破解您自己的机器并获取 root 权限。

我必须通过键盘和显示器本地连接并切换到默认 shell。永远不要让 root 使用用户空间 shell。始终让 root 使用系统自带的默认 shell。如果您需要或想要使用不同的 shell,请在登录后手动启动它。这就是我现在所做的。

请记住,除非你绝对确定不再需要这些库,否则不要这样做make delete-old-libs:-D/usr/src

答案2

如果 sftp 有效,我会尝试上传一个~/.ssh/rc包含我需要运行的命令的文件(也许echo password | chsh -s /usr/local/bin/bash?),并希望ssh正如其手册页所述,在启动用户的 shell 之前执行这些命令。

答案3

方法 1

尝试关注

    ssh 用户名@主机名 "/bin/sh -i"

如果成功的话,您将使用 sh 而不是 bash 登录。

方法 2

使用另一个用户 ssh 进入该框,然后使用 su/sudo 重新获得 root 访问权限。

答案4

bashzsh都依赖于libiconv,因此它们都无法工作,因为你删除了它。你可以按照 John 的建议,ssh明确地告诉运行shcsh,它们都在基础系统中,因此应该可以正常工作,因为它们对 ports 中的任何内容都没有外部依赖。

ssh me@there "/bin/sh -i"

您现在有一个 shell 会话,您可以在其中libiconv再次安装。为了将来参考,值得使用类似ports-mgmt/pkg_cutleaves删除不再需要的端口之类的东西 - 这会使像这样自找麻烦变得更加困难!

相关内容