ssh_exchange_identification: conexão fechada pelo host remoto (não usando hosts.deny)

74

Estou não usando hosts.allowou hosts.deny, ainda mais SSH funciona do meu windows-máquina (mesmo laptop, diferente disco rígido), mas não a minha máquina Linux.

ssh -vvv root@host -p port dá:

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

Na máquina Windows, tudo funciona bem, então eu verifiquei os logs de segurança e as linhas são idênticas, o servidor trata as duas "máquinas" diferentes de maneira diferente e são permitidas pela autenticação de chave pública.

Isso leva à conclusão de que esse deve ser um problema no meu laptop ArchLinux local ... mas o que?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

Então esse não é o problema ..

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Não há conflitos com as configurações do firewall (por enquanto).

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

As permissões parecem estar boas (iguais no servidor). Também tentadas sem configurar /etc/ssh/ssh_configcom o mesmo resultado, exceto por muitas configurações automáticas acontecendo no cliente, que terminam com o mesmo erro.

Torxed
fonte
forneça a saída de iptables-save|grep -v '^#', que incluirá as outras tabelas (por exemplo, nate mangle). Se eles estiverem vazios, basta dizer isso. Sua iptablessaída acima é, por padrão, limitada à filtertabela. Além disso, no servidor SSH, execute o SSH em uma porta alternativa como esta e forneça a saída de depuração.
0xC0000022L
@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609d e gist.github.com/Torxed/1fd9b5b0c276629caf30 e em relação ao firewall, o SSH está funcionando para a minha unidade Windows (novamente, o mesmo laptop, ergo mac e IP), mas não para o meu disco Linux.
Torxed
mais duas coisas. Você precisa se conectar à instância na porta alternativa. Caso contrário, você não poderá ver possíveis problemas. No que diz respeito ao Windows x Linux, talvez um deles esteja usando IPv6 ( ip6tables-save)?
0xC0000022L
@ 0xC0000022L Sinto muito. I ligado ao IP errado .. Correndo SSH na porta 8080 é por isso que eu recebi este problema ao se conectar a um host executando um web-cache na porta 8080> _ <
Torxed
11
Isso aconteceu comigo de forma intermitente enquanto meu servidor estava sendo atingido por algum invasor aleatório que tentava usar o sshd de força bruta. Corrigido adicionando regras de firewall para eliminar conexões do invasor.
Andrew Hows

Respostas:

61

Se você descartou algum fator "externo", o seguinte conjunto de etapas geralmente ajuda a reduzi-lo. Portanto, embora isso não responda diretamente à sua pergunta, pode ajudar a rastrear a causa do erro.

Solução de problemas sshd

O que eu acho geralmente muito útil nesses casos é começar sshdsem deixar daemonizar. O problema no meu caso era que syslognem auth.logmostrava nada significativo.

Quando o iniciei no terminal, obtive:

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

Muito melhor! Essa mensagem de erro me permitiu ver o que havia de errado e corrigi-lo. Nenhum dos arquivos de log continha essa saída.

Nota: pelo menos no Ubuntu, $(which sshd)é o melhor método para satisfazer a sshdexigência de um caminho absoluto. Caso contrário, você vai ter o seguinte erro: sshd re-exec requires execution with an absolute path. O -p 10222faz sshdescutar nessa porta alternativa, substituindo o arquivo de configuração - para não colidir com sshdinstâncias potencialmente em execução . Certifique-se de escolher uma porta gratuita aqui.

Finalmente: conecte-se à porta alternativa ( ssh -p 10222 user@server).

Esse método me ajudou muitas vezes a encontrar problemas, sejam de autenticação ou outros tipos. Para obter uma saída realmente detalhada stdout, use $(which sshd) -Ddddp 10222(observe o dditem adicionado para aumentar a verbosidade). Para mais verificação de bondade de depuração man sshd.

0xC0000022L
fonte
I ligado ao IP errado, mas isso me fez ir .. referir que nenhum dos meus tentativas de conexão apareceu na saída de depuração ..
Torxed
2
$ (which sshd) -Ddp 10222, deixe-me finalmente ver o que estava causando o meu problema. Muito obrigado!
C
9

Você também pode ter um host com uma memória tão fragmentada que não pode alocar uma página com uma memória contígua para bifurcar o processo de hospedagem de uma sessão SSH.

Nesse caso, você pode receber uma das seguintes mensagens:

ssh_exchange_identification: read: Connection reset by peer

ou:

Connection closed by aaa.bbb.ccc.ddd

dependendo de quão longe o host chega antes de cair fora.

Se a fragmentação da memória for a causa aparente, a solução é acessar o servidor por outros meios e reiniciar alguns dos serviços pertinentes. Eu descobri que o Apache e o MySQL são os culpados pelas VMs, já que as VMs não têm uma partição de troca. Caso contrário, reinicie o host.

gerrit_hoekstra
fonte
6

Só por precaução, porque isso aconteceu comigo. Verifique se o sshd está sendo executado no host!

É um fracasso estúpido, mas pode ser realmente o seu problema.

txomon
fonte
10
Se sshdnão estivesse em execução, a conexão não seria fechada, mas recusada (tentativa ssh -p someportwithoutsshd localhost).
Anthon
4
Bem, meu caso não era uma conexão direta. Criei um túnel reverso para uma máquina que não escuta e essa foi a saída na conexão do cliente ssh.
txomon
11
estúpida me também não sabem que eu não tenho qualquer sshd em execução, fixa-lo através da instalação de openssh-server
Bryan estrito
4

Descobri que esse erro se devia ao exceder as sessões ssh no servidor. Eu encontrei os hosts tentando conectar e eliminou todas as sessões de todos os clientes. O problema foi resolvido após a limpeza de todas as sessões.

NvipiN
fonte
20
Como você fez isso?
Interrompido
4
como você fez isso? ping ...
knocte
Uma maneira seria encontrar as sessões abertas usando whoe matando os processos do usuário.
Flatron
Como matar sessões ssh: unix.stackexchange.com/questions/127571/…
Tejas Kale
4

Encontrei o ssh_exchange_identification: read: Connection reset by peerproblema em um script que inicia 16 ou mais sessões ssh em um loop. aparentemente, o sshd não pode acompanhar; adicionar um sono curto resolveu meu problema:

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done
duanev
fonte
3

Ou você pode ter feito o que fiz ontem à noite e excluído / var / empty. Aparentemente, esse diretório e suas permissões são essenciais para o funcionamento do sshd e não o refaz quando o reinício /etc/init.d/sshdfalhará ao reiniciar e nada do systemd lhe dirá o porquê.

Encontrei o problema executando o sshd em primeiro plano:

# /usr/sbin/sshd -Dd
  Missing privilege separation directory: /var/empty/sshd

A reconstrução dos diretórios resolveu o problema no meu caso:

drwxr-xr-x. root root  /var/empty
drwx--x--x. root root  /var/empty/sshd

Nota para programadores do Linux: Coisas criticamente importantes em /var/empty... realmente ???

crashulater
fonte
ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory. Portanto, pelo menos uma distribuição acabou com isso totalmente. Olhando para o /etc/init.d/sshdscript, parece que no Debian, pelo menos, o diretório de separação de privilégios é agora /var/run/sshde é criado no momento da inicialização, se ele ainda não existe.
roaima 9/09/17
2

Ocorreu o erro ssh_exchange_identification: Connection closed by remote hostao tentar conectar-me ao SSH: fiz um encaminhamento de porta remota para a porta SSH 22 do meu computador local, para que eu possa acessá-lo temporariamente a partir de um servidor remoto na Internet.

Na verdade, o erro foi apenas exibida porque eu não me lembro que eu desativado o serviço de SSH na inicialização para que eu tinha para iniciar o serviço SSH no meu computador local: sudo service ssh start.

baptx
fonte
11
obrigada, você salva minha vida.
Al Kasih
0

As coisas importantes primeiro; telnet para o endereço IP do host para verificar se a porta 22 está realmente escutando (aberta) nesse host:

telnet x.x.x.x 22

(caso contrário, você pode conectar um cabo do console para fazer login)

No meu caso, ele não estava funcionando e eu liguei um cabo do console para fazer login. Depois de fazer login, descobri que todas as 5 linhas VTY estavam ocupadas nesse host (um roteador Cisco).

Eu limpei as conexões antigas que estavam penduradas lá para liberar as linhas do VTY, funcionou. Eu adicionei o comando "exec-timeout 15" sob as linhas do VTY. Então eu removi o cabo do console.

Lição:

Defina um tempo limite de 5 a 10 minutos em todos os seus dispositivos - (se nenhuma atividade for detectada).

Oumar
fonte
2
Nesse caso, você obteria uma "conexão recusada" como outra resposta implícita , não "Conexão estabelecida" seguida de "Conexão redefinida por pares"
Jeff Schaller
11
Ter o telnet disponível (daemon escutando telnet) é uma falha de segurança bastante grave, uma falha que é a principal razão pela qual o ssh é o console remoto preferido.
Xalorous
Usar o cliente telnet para investigar o daemon ssh na porta 22 não é uma falha de segurança. Usar o cliente telnet para conectar-se ao daemon telnet na porta 23 é uma falha de segurança.
Dan Anderson
0

Meu caso foi definido por engano como proxy de soquete (que não está funcionando). Eu tenho exatamente a mesma saída ssh -vvv e log sshd vazio.

clarkttfu
fonte
0

O erro ssh_exchange_identification: Connection closed by remote hostpode ocorrer por alguns motivos desconhecidos. Quando eu estava usando o código do Visual Studio . O mesmo erro ocorreu quando tentei extrair do repositório remoto usando o git pullcomando

Eu só fechou o terminal incorporado e abriu o terminal do Ubuntu e puxou novamente. E foi bem sucedido

Mohammed Shareef C
fonte
0

De com CentOS Linux release 7.4.1708 (Core)com OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017atrás de uma conexão não filtrando portas, tive:

ssh_exchange_identification: conexão fechada pelo host remoto

E aconteceu que meu Raspberry Pi estava desligado!

Eu estava pensando que um host não ligado teria produzido o erro "Nenhuma rota para hospedar". O Raspberry Pi está atrás do meu roteador ISP e, provavelmente, foi ele que estava fechando a conexão.

Então eu repeti o experimento (tentando conectar-se a um Raspberry Pi desligado) de outra conexão com a Internet, também não filtrando portas com o Debian Stretch OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017e, desta vez, esperava o seguinte:

Nenhuma rota para hospedar

Gabriel Devillers
fonte