我使用 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
bash
和zsh
都依赖于libiconv
,因此它们都无法工作,因为你删除了它。你可以按照 John 的建议,ssh
明确地告诉运行sh
或csh
,它们都在基础系统中,因此应该可以正常工作,因为它们对 ports 中的任何内容都没有外部依赖。
ssh me@there "/bin/sh -i"
您现在有一个 shell 会话,您可以在其中libiconv
再次安装。为了将来参考,值得使用类似ports-mgmt/pkg_cutleaves
删除不再需要的端口之类的东西 - 这会使像这样自找麻烦变得更加困难!