A conexão SSH fecha quando o shell falha ao carregar

2

Eu tenho o FreeBSd rodando com o OpenSSH. Eu configurei tudo e a conexão via SSH funcionou perfeitamente. Então eu decidi me livrar de algumas portas não usadas e eu obviamente desinstalei uma que foi usada pelo zsh.

Quando eu faço o login, recebo o seguinte:

~ # 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.

O problema é que eu não tenho monitor nem tenho um teclado (agora) para resolver o problema muito rapidamente ...

Eu tentei isso para forçar o carregamento de um shell diferente > Forçar o SSH a usar um shell específico

Não funciona como eu recebo:

~ # 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"%    

Alguma idéia de como resolvê-lo sem teclado e monitor?

    
por Community 07.11.2012 / 16:20

4 respostas

3

Eu fiz o mesmo erro exato uma vez. Duvido que você consiga obter o acesso root necessário para alterar seu shell remotamente. Outra opção menos provável é hackear sua própria caixa e obter privilégios de root.

Eu tive que me conectar localmente via teclado e monitor e mudar para o shell padrão. Nunca faça root usar um shell userland. Sempre deixe o root usar o shell padrão que vem com o sistema. Se você precisar ou quiser usar um shell diferente, inicie-o manualmente após o login. Isso é o que eu faço agora.

E lembre-se, não faça make delete-old-libs em /usr/src a menos que você absolutamente saiba que você não precisará mais dessas bibliotecas :-D

    
por 09.11.2012 / 06:41
2

Se o sftp funcionar, eu tentaria carregar um arquivo ~/.ssh/rc com os comandos que preciso executar (talvez echo password | chsh -s /usr/local/bin/bash ?) e esperar que ssh , como seus estados de página de manual, executem esses comandos antes de iniciar o shell do usuário.

    
por 07.11.2012 / 16:26
1

Método 1

Tente seguir

    ssh username@hostname "/bin/sh -i"

Isso permitirá que você faça login com sh em vez de bash se for bem-sucedido.

Método 2

ssh na caixa com outro usuário e depois su / sudo para recuperar o acesso root.

    
por 09.11.2012 / 07:32
1

bash e zsh têm dependência de libiconv , portanto nenhum dos dois funcionará para você, desde que você o removeu. Você pode fazer como John sugeriu e informar ssh explicitamente para executar sh ou csh , que estão no sistema básico e devem, portanto, funcionar corretamente, pois não possuem dependência externa de nada nas portas.

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

Agora você tem uma sessão de shell, onde pode instalar libiconv novamente. Para referência futura, vale a pena usar algo como ports-mgmt/pkg_cutleaves para remover as portas que você não precisa mais - torna muito mais difícil atirar no próprio pé desse jeito!

    
por 09.11.2012 / 18:47