SSH-соединение закрывается, так как оболочка не загружается
У меня FreeBSd работает с OpenSSH. Я все настроил и соединение через SSH работало отлично. Затем я решил избавиться от некоторых неиспользуемых портов и, очевидно, удалил тот, который использовался zsh.
Когда я вхожу в систему, я получаю следующее:
~ # ssh cristian@192.168.1.56
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 questions@FreeBSD.org 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.
Дело в том, что у меня нет монитора и нет клавиатуры (прямо сейчас), чтобы быстро решить проблему...
Я попытался это заставить загрузку другой оболочки> заставить SSH использовать конкретную оболочку
Не работает, как я получаю:
~ # ssh cristian@192.168.1.56 /usr/local/bin/sh << EOF
chsh -s /usr/local/bin/bash
EOF
Password:
Shared object "libiconv.so.3" not found, required by "zsh"%
Есть идеи как решить это без клавиатуры и монитора?
4 ответа
Я сделал ту же самую ошибку точно один раз. Я сомневаюсь, что вы сможете получить root-права, необходимые для удаленного изменения вашей оболочки. Другой, менее вероятный вариант - взломать ваш собственный ящик и получить права root.
Мне пришлось подключаться локально через клавиатуру и монитор и перейти на оболочку по умолчанию. Никогда не заставляйте root использовать оболочку пользователя. Всегда позволяйте root использовать оболочку по умолчанию, которая поставляется с системой. Если вам нужна или вы хотите использовать другую оболочку, запустите ее вручную после входа в систему. Это то, что я делаю сейчас.
И помни, не делай make delete-old-libs
в /usr/src
если вы абсолютно не знаете, что вам больше не понадобятся эти библиотеки:-D
Если sftp работает, я бы попытался загрузить ~/.ssh/rc
файл с командами, которые мне нужны для запуска (возможно, echo password | chsh -s /usr/local/bin/bash
?) и надеюсь, что ssh
Как говорится на странице руководства, эти команды выполняются перед запуском оболочки пользователя.
Способ 1
Попробуйте следовать
ssh username@hostname "/bin/sh -i"
Это позволит вам войти в систему с помощью sh вместо bash в случае успеха.
Способ 2
SSH в коробку с другим пользователем, а затем su/sudo для восстановления корневого доступа.
bash
а также zsh
оба имеют зависимость от libiconv
так что ни один не будет работать для вас, так как вы удалили его. Вы можете сделать, как предложил Джон, и сказать ssh
явно запустить sh
или же csh
, которые оба находятся в базовой системе и поэтому должны функционировать правильно, так как они не имеют внешней зависимости от чего-либо в портах.
ssh me@there "/bin/sh -i"
Теперь у вас есть сеанс оболочки, где вы можете установить libiconv
снова. Для дальнейшего использования стоит использовать что-то вроде ports-mgmt/pkg_cutleaves
убрать порты, которые вам больше не нужны - это намного труднее выстрелить себе в ногу вот так!