Problemas de SSH: error de lectura del socket: restablecimiento de la conexión por igual

14

Compilé OpenSSH_6.6p1 en uno de nuestro servidor. Puedo iniciar sesión a través de SSH en el servidor actualizado. Pero no puedo conectarme a otros servidores que ejecutan OpenSSH_6.6p1 u OpenSSH_5.8 a partir de esto. Al conectarme recibo un error como el siguiente.

Read from socket failed: Connection reset by peer

En el servidor de destino en los registros, lo veo como a continuación.

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

Intenté especificar el cipher_spec [ssh -c aes128-ctr destination-server] como se menciona aquí y pude conectarme. ¿Cómo puedo configurar ssh para usar el cifrado por defecto? ¿Por qué se requiere el cifrado aquí?

nitinas
fuente
Desde el servidor del que obtiene este error, ¿qué sucede cuando lo hace telnet ip.or.name.of.offending.server 22?
MadHatter
1
Ambas partes parecen pensar que la otra parte cerró la conexión. En este punto, rompería tcpdump o wireshark y lo ejecutaría en ambos extremos.
Michael Hampton
@ MadHatter Puedo hacer telnet en el puerto 22 y obtener respuesta SSH.
nitins
¿Intenta compilar versiones anteriores de openssh como 6.5p1 para ver si este comportamiento se debe a un cambio en la base de código?

Respuestas:

7

El problema suena como un error del lado del servidor. Cuando el cliente envía la lista de cifrados, el servidor openssh probablemente espera poder leer la lista en una sola llamada al sistema.

Si la lista de cifrados admitidos es más larga de lo que se puede transmitir en un paquete, el servidor puede obtener menos bytes de lo esperado en la primera llamada. El comportamiento correcto en el servidor sería realizar otra llamada para obtener el resto de los bytes. Pero a partir de la descripción del problema, el servidor cierra la conexión cuando no obtuvo la lista completa de cifrados a la vez. Cuando llegue el siguiente paquete del cliente, el servidor enviará un restablecimiento de conexión al cliente.

La configuración del cliente para usar una lista más corta de cifrados evitaría el error. El cliente openssh buscará la lista de cifrados en los siguientes lugares:

  1. En la línea de comando usando -c cipher_spec o -o Ciphers = cipher_spec
  2. En ~ / .ssh / config especificando Ciphers cipher_spec en la sección de host relevante o antes del primer host.
  3. En / etc / ssh / ssh_config usando el mismo formato que ~ / .ssh / config
  4. Una lista predeterminada integrada en el cliente en tiempo de compilación.

Los dos archivos de configuración son, respectivamente, por usuario y configuraciones de todo el sistema. Usar Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbccomo lo sugirió Eric debería funcionar bien.

kasperd
fuente
¿Es este un defecto conocido en esa versión de openssh? ¿Alguien tiene un enlace al rastreador de errores openssh para este problema?
user313114
1
@ user313114 No he buscado ningún rastreador de este tipo porque creo que el error ya se solucionó en las versiones más recientes hace tres años cuando se escribió esta respuesta.
kasperd
4

Puede especificar el cifrado en el archivo de configuración ssh (/ etc / ssh / ssh_config o similar, depende de $ PREFIX, etc.). Cualquier opción que pase al cliente ssh en la línea de comandos se puede establecer en el archivo de configuración ssh (cliente).

Aquí está la línea relevante (solo descomentar):

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

fuente
3

Mi forma de arreglarlo, espero que ayude a alguien:

# 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 agregando un valor

add :  MaxAuthTries 3

Edite ssh_config descomentando un valor

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

Resolvió este problema modificando los permisos de archivo a continuación a 600.

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

También modificó el permiso para todos los demás archivos dentro de '/ etc / ssh /' a 644. Todos los archivos deben ser propiedad de 'root'.

A continuación se muestra el conjunto completo de comandos para asignar permisos adecuados para todos los archivos en el directorio '/ etc / ssh':

raíz conocida: root / 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
fuente
-1

Mi problema que tenía exactamente los mismos síntomas que está viendo se debió a claves de host truncadas. Intenta recrearlos con:

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