Quando eu entro ssh
em um dos meus servidores, ele parece fazer login, mas trava antes de me fornecer o prompt ( message debug2: shell request accepted on channel 0 is the last log entry
).
Embora o estranho é que ssh -t "/bin/bash"
funciona quando ssh
não funciona .
O que eu descobri até agora
- Posso efetuar login normalmente a partir de servidores na mesma localização geográfica
- Se eu
ssh -t '/bin/bash'
- posso efetuar login perfeitamente em QUALQUER local. - Se eu usar
rsync
para o servidor, ele parece funcionar, e fechaduras, em seguida, - Se eu usar
rsync
do servidor, ele funcionará sem problemas
O que eu tentei
- remover ou alterar todas as opções de login
.profile
,.bashrc /etc/profile
- Alterar o
ssh_config
e / ousshd_config
para um de um servidor idêntico que funciona bem - Eu verifiquei o roteamento
- Um especialista em rede examinou
tcpdump
sem sucesso (embora pareça haver muitas retransmissões)
Eu realmente não consigo pensar em mais nada
Além de um driver / firmware de placa de rede desonesto.
match
declaraçãosshd_config
? Existe apenas uma instância desshd
execução?.ssh/authorized_keys
, comocommand=…
? Você já passou por todas as regras de firewall para ver se é possível bloquear acidentalmente alguns pacotes SSH?/etc/profile.d/*
ou/etc/bashrc
.Respostas:
Isso pode resultar de um problema no perfil.
Quando você se conectar com
ssh -t /bin/bash
seu shell não vai 'login', não será fonte do/etc/profile
nem o~/.profile
e~/.bashrc
...Então, após a conexão, coloque o shell no modo de depuração e, em seguida, procure cada arquivo para encontrar o que está bloqueando:
EDITAR
Observe que eu estava errado, o arquivo .bashrc será originado por qualquer shell interativo (portanto, apenas o perfil, os arquivos profile.d são importantes aqui).
Tente fazer a lista das diferentes fases do processo de conexão. Algo assim
1) conexão ssh (config, ...)
2) login (PAM, tty, wtmp, ...)
3) iniciando o shell (perfil, acesso ao diretório home, ...)
Para verificar o (1), você pode iniciar o daemon sshd no modo de depuração. Para isso, é necessário iniciar outro sshd, ouvindo uma porta dedicada (não na porta 22, portanto, não é necessário parar o daemon sshd comum).
Esse sshd aceita apenas uma conexão e não entra em segundo plano. Abra outro terminal e conecte-se a essa sessão ssh.
Você pode comparar as mensagens recebidas com as de outro servidor da mesma marca. Então você saberá se o problema está no lado ssh ou não.
(-ddd e -vvv são o nível máximo de depuração, você pode ajustá-lo)
Eu tenho esse link , muito mais detalhado.
fonte
A resposta para o meu problema Parece que foi um problema de rede. Acabei descobrindo que, diminuindo um pouco o MTU de todas as placas de rede, o problema desapareceu.
Provavelmente algo está mal configurado para essa rede, mas agora posso provar isso e entregá-lo à equipe da rede (que ficava me dizendo que era um problema no servidor).
Esteja ciente de que este é o último recurso. A peculiaridade que tive era que o servidor ssh trabalhava na mesma sub-rede, mas não fora dela, e o ssh -t '/ bin / bash' funcionava de qualquer lugar.
Eu também tinha rsyncs que começariam bem, mas em algum momento simplesmente desligue ou desligue a conexão.
Portanto, se você estiver olhando para essa resposta, tente primeiro as outras acima, e SOMENTE se você tiver esquisitices como a minha, é provável que isso ajude.
Então, obrigado por toda a ajuda. Eu tentei de tudo, e isso me ensinou muito, e deixe-me confirmar que não tinha nada a ver com o servidor (que é tudo o que eu esperava).
Então, obrigado a todos que ajudaram
fonte
Quando o fizer
ssh some_user@some_host /bin/bash
, o que você está fazendo está lançando algum_usuário 's shell (como definido no/etc/passwd
no some_host ) e, em seguida, executar o comando dado,/bin/bash
, de dentro do shell.Agora, o shell de some_user (suponha que também
bash
seja) não está sendo iniciado interativamente (está executando o comando fornecido). Portanto, ele não aloca um pty (um pseudo-terminal ) e isso significa que não há um pty para o comando emitido usar, portanto ele é iniciado de maneira não interativa.No exemplo, o
/bin/bash
comando solicitado é iniciado, mas parece travar.Você pode corrigir isso pedindo
ssh
para criar um pty de qualquer maneira, para que haja um disponível para o shell e seus processos filhos. Isto é o que-t
faz.Você também pode corrigir isso forçando o comando a criar um pty. Pois
bash
você faz isso passando um-i
argumento. A seguinte linha de comando também deve funcionar:Observe, no entanto, que neste último caso, o shell não pode acessar
/dev/tty
e isso resulta em um aviso:As razões para isso são explicadas aqui . Isso pode ou não ser um problema, dependendo do que você planeja fazer no shell, mas usar
ssh -t
é provavelmente a melhor opção.(observe que você pode apenas passar
bash
como o comando, porque ele deve estar no caminho do shell padrão do usuário)fonte
Eu tenho o mesmo problema quando usei uma plataforma de virtualização aninhada recentemente.
Funciona após reduzir o MTU de 1500 para 1400 no servidor de origem ou destino.
fonte