Problemas de SSH: falha na leitura do soquete: redefinição de conexão por ponto

14

Compilei o OpenSSH_6.6p1 em um de nossos servidores. Eu consigo logar via SSH no servidor atualizado. Mas não consigo me conectar a outros servidores executando o OpenSSH_6.6p1 ou o OpenSSH_5.8 a partir disso. Ao conectar, estou recebendo um erro como abaixo.

Read from socket failed: Connection reset by peer

No servidor de destino nos logs, estou vendo como abaixo.

sshd: fatal: Read from socket failed: Connection reset by peer [preauth]

Tentei especificar o servidor de destino cipher_spec [ssh -c aes128-ctr] conforme mencionado aqui e consegui conectar. Como configurar o ssh para usar a cifra por padrão? Por que a cifra é necessária aqui?

nitinas
fonte
No servidor do qual você recebe esse erro, o que acontece quando você faz isso telnet ip.or.name.of.offending.server 22?
21414 MadHatter
1
Ambos os lados parecem pensar que o outro lado fechou a conexão. Nesse ponto, eu quebraria o tcpdump ou o wireshark e o executaria nas duas extremidades.
Michael Hampton
@ MadHatter Posso telnetar na porta 22 e obter resposta SSH.
Nitin 25/03
Tente compilar versões anteriores do openssh como 6.5p1 para ver se esse comportamento é devido a uma alteração na base de código?

Respostas:

7

O problema parece um bug do lado do servidor. Quando o cliente envia a lista de cifras, o servidor openssh provavelmente espera poder ler a lista em uma única chamada do sistema.

Se a lista de cifras suportadas for maior do que a transmitida em um pacote, o servidor poderá receber menos bytes na primeira chamada do que o esperado. O comportamento correto no servidor seria executar outra chamada para obter o restante dos bytes. Porém, a partir da descrição do problema, o servidor fecha a conexão quando não obtém a lista completa de cifras de uma só vez. Quando o próximo pacote do cliente chegar, o servidor enviará uma redefinição de conexão ao cliente.

Configurar o cliente para usar uma lista mais curta de cifras funcionaria para solucionar o problema. O cliente openssh procurará a lista de cifras nos seguintes locais:

  1. Na linha de comandos, usando -c cipher_spec ou -o Ciphers = cipher_spec
  2. Em ~ / .ssh / config, especificando Ciphers cipher_spec na seção do host relevante ou antes do primeiro host.
  3. Em / etc / ssh / ssh_config usando o mesmo formato que ~ / .ssh / config
  4. Uma lista padrão incorporada ao cliente no momento da compilação.

Os dois arquivos de configuração são respectivamente configurações por usuário e em todo o sistema. Usar Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbccomo Eric sugeriu deve funcionar bem.

Kasperd
fonte
Isso é uma falha de conhecimento nessa versão do openssh? alguém tem um link para o openssh bug-tracker para este problema?
precisa saber é o seguinte
1
@ user313114 Não procurei esse rastreador porque acredito que o bug já havia sido corrigido nas versões mais recentes há três anos, quando esta resposta foi escrita.
kasperd
4

Você pode especificar cifra no arquivo de configuração ssh (/ etc / ssh / ssh_config ou similar, depende de $ PREFIX etc). Qualquer opção que você passar para o cliente ssh na linha de comando pode ser definida no arquivo de configuração ssh (cliente).

Aqui está a linha relevante (apenas descomente):

#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

fonte
3

Minha maneira de corrigi-lo, espero que ajude alguém:

# Recreate host keys
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A

# Re-install SSh
sudo apt-get --reinstall install openssh-server openssh-client

Edite sshd_config adicionando um valor

add :  MaxAuthTries 3

Edite ssh_config descomentando um valor

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
Jānis Konošonoks
fonte
0

Resolvido esse problema, modificando as permissões de arquivo abaixo para 600.

/ etc / ssh / ssh_host_dsa_key
/ etc / ssh / ssh_host_rsa_key
/ etc / ssh / ssh_host_ecdsa_key

Também modificou a permissão para todos os outros arquivos dentro de '/ etc / ssh /' para 644. Todos os arquivos de arquivos devem pertencer a 'root'.

Abaixo está o conjunto completo de comandos para atribuir permissões apropriadas para todos os arquivos no diretório '/ etc / ssh':

raiz chown: raiz / etc / ssh / * chmod 644 / etc / ssh / *
chmod 600 / etc / ssh / ssh_host_dsa_key
chmod 600 / etc / ssh / ssh_host_rsa_key
chmod 600 / etc / ssh / ssh_host_ecdsa_key

jash
fonte
-1

Meu problema que teve exatamente os mesmos sintomas que você está vendo foi devido a chaves de host truncadas. Tente recriá-los com:

sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A
Srdjan Grubor
fonte