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 убрать порты, которые вам больше не нужны - это намного труднее выстрелить себе в ногу вот так!

Другие вопросы по тегам