ssh_exchange_identification: conexión cerrada por host remoto (sin utilizar hosts.deny)


74

Estoy no utilizar hosts.allowo hosts.deny, aún más SSH trabaja ventanas de mi-máquina (mismo equipo portátil, diferente disco duro), pero no mi máquina Linux.

ssh -vvv root@host -p port da:

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

En la máquina de Windows todo funciona bien, así que verifiqué los registros de seguridad y las líneas allí son idénticas, el servidor trata las dos "máquinas" diferentes de manera diferente y ambas se permiten mediante autenticación de clave pública.

Entonces eso lleva a la conclusión de que esto debe ser un problema con mi computadora portátil ArchLinux local ... pero ¿qué?

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

Entonces ese no es el 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 

No hay conflictos con la configuración del firewall (por ahora).

[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

Los permisos parecen estar bien (lo mismo en el servidor). También se intentó sin configurar /etc/ssh/ssh_configcon el mismo resultado, excepto por una gran cantidad de configuración automática en el cliente que termina con el mismo error.


proporcione el resultado de iptables-save|grep -v '^#', que incluirá las otras tablas (por ejemplo, naty mangle). Si están vacíos, simplemente dígalo. Su iptablessalida anterior está limitada por defecto a la filtertabla. Además, en el servidor SSH, ejecute SSH en un puerto alternativo como este y proporcione la salida de depuración.
0xC0000022L

@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609d y gist.github.com/Torxed/1fd9b5b0c276629caf30 y con respecto al cortafuegos, SSH está funcionando para mi unidad de Windows (de nuevo, la misma computadora portátil Ergo Mac e IP) pero no para mi disco Linux.
Torxed

Dos cosas más. Debe conectarse a la instancia en el puerto alternativo. De lo contrario, no podrá ver posibles problemas. En cuanto a lo de Windows vs. Linux, ¿es uno de ellos usando IPv6 quizás ( ip6tables-save)?
0xC0000022L

@ 0xC0000022L Lo siento mucho. Me conecté a la IP incorrecta. Al ejecutar SSH en el puerto 8080, es por eso que recibí este problema al conectarme a un host que ejecuta un caché web en el puerto 8080> _ <
Torxed

1
Esto me sucedió de forma intermitente mientras mi servidor estaba siendo golpeado por un atacante aleatorio que intentaba forzar la fuerza bruta sshd. Se solucionó agregando reglas de firewall para desconectar las conexiones del atacante.
Andrew Hows

Respuestas:


61

Si ha descartado cualquier factor "externo", el siguiente conjunto de pasos generalmente ayuda a reducirlo. Entonces, si bien esto no responde directamente a su pregunta, puede ayudar a rastrear la causa del error.

Solución de problemas sshd

En general, lo que encuentro muy útil en tales casos es comenzar sshdsin dejar que demonice. El problema en mi caso fue que ni syslogtampoco auth.logmostró nada significativo.

Cuando lo comencé desde la terminal obtuve:

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

¡Mucho mejor! Este mensaje de error me permitió ver qué está mal y solucionarlo. Ninguno de los archivos de registro contenía esta salida.

NB: al menos en Ubuntu, este $(which sshd)es el mejor método para satisfacer los sshdrequisitos de una ruta absoluta. De lo contrario obtendrá el siguiente error: sshd re-exec requires execution with an absolute path. Esto -p 10222hace que sshdescuche en ese puerto alternativo, anulando el archivo de configuración, esto es para que no choque con sshdinstancias potencialmente en ejecución . Asegúrese de elegir un puerto libre aquí.

Finalmente: conéctese al puerto alternativo ( ssh -p 10222 user@server).

Este método me ha ayudado muchas veces a encontrar problemas, ya sean problemas de autenticación u otros tipos. Para obtener resultados realmente detallados stdout, use $(which sshd) -Ddddp 10222(tenga en cuenta lo agregado ddpara aumentar la verbosidad). Para más depuración, verifique la bondad man sshd.


He conectado a la equivocada IP, pero esto me va .. señalar que ninguno de mis intentos de conexión se presentó en la salida de depuración ..
Torxed

2
$ (que sshd) -Ddp 10222 me permitió finalmente ver qué estaba causando mi problema. ¡Gracias un montón!
Cuga

9

También puede tener un host cuya memoria está tan fragmentada que no puede asignar a una página una memoria contigua para bifurcar el proceso para alojar una sesión SSH.

En tal caso, puede obtener cualquiera de los mensajes:

ssh_exchange_identification: read: Connection reset by peer

o:

Connection closed by aaa.bbb.ccc.ddd

dependiendo de qué tan lejos llegue el host antes de que salga.

Si la causa aparente es la fragmentación de la memoria, la solución es acceder al servidor por otros medios y reiniciar algunos de los servicios pertinentes. He encontrado que Apache y MySQL son los culpables de las máquinas virtuales, ya que las máquinas virtuales no tienen una partición de intercambio. De lo contrario, reinicie el host.


6

Por las dudas, porque esto me pasó a mí. ¡Asegúrese de tener sshd ejecutándose en el host!

Es un fracaso estúpido, pero podría ser realmente tu problema.


10
Si sshdno se estaba ejecutando, la conexión no se cerraría pero se rechazaría (intente ssh -p someportwithoutsshd localhost).
Anthon

44
Bueno, mi caso no fue una conexión directa. Creé un túnel inverso, para una máquina que no escucha, y esa fue la salida en la conexión del cliente ssh.
txomon

1
estúpido tampoco sé que no tengo ningún sshd ejecutándose, lo arreglé instalando openssh-server
Bryan Estrito

4

Encontré que este error se debió a las sesiones ssh excedidas en el servidor. Encontré que los hosts intentaban conectarse y eliminé todas las sesiones de todos los clientes. El problema se resolvió después de limpiar todas las sesiones.


20
¿Cómo hiciste eso?
Abortado el

44
¿cómo hiciste eso? ping ...
knocte

Una forma sería encontrar las sesiones abiertas utilizando whoy eliminando los procesos del usuario.
Flatron


4

Me encontré con el ssh_exchange_identification: read: Connection reset by peerproblema en un script que inicia 16 o más sesiones ssh en un bucle. sshd aparentemente no puede seguir el ritmo; agregar un sueño corto resolvió mi 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

3

O puede que hayas hecho lo que hice anoche y eliminé / var / empty. Aparentemente, ese directorio y sus permisos son esenciales para el funcionamiento de sshd y no rehacerá el directorio cuando se reinicie /etc/init.d/sshd, no se reiniciará y nada systemd le dirá por qué.

Encontré el problema ejecutando sshd en primer plano:

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

Reconstruir los directorios resolvió el problema en mi caso:

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

Nota para los programadores de Linux: ¿Cosas de importancia crítica en /var/empty... realmente?


ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory. Entonces, al menos una distribución ha eliminado esto por completo. Al observar el /etc/init.d/sshdscript, parece que en Debian, al menos, el directorio de separación de privilegios es ahora /var/run/sshdy se crea en el momento del inicio si aún no existe.
roaima

2

Recibí el error ssh_exchange_identification: Connection closed by remote hostal intentar conectarme a SSH: realicé un reenvío de puerto remoto para el puerto SSH 22 de mi computadora local para poder acceder temporalmente desde un servidor remoto en Internet.

De hecho, el error fue simplemente mostrar porque no recordaba que he deshabilitado el servicio SSH en el arranque así que tuve que iniciar el servicio SSH en mi equipo local: sudo service ssh start.


1
gracias, me salvaste la vida.
Al Kasih

0

Primero lo primero; telnet a la dirección IP del host para verificar si el puerto 22 está realmente escuchando (abierto) en ese host:

telnet x.x.x.x 22

(de lo contrario, puede conectar un cable de consola para iniciar sesión)

En mi caso, no funcionaba y conecté un cable de consola para iniciar sesión. Una vez que inicié sesión, descubrí que las 5 líneas VTY estaban ocupadas en ese host (un enrutador Cisco).

Limpié las conexiones antiguas que colgaban allí para liberar las líneas VTY, funcionó. Agregué el comando "exec-timeout 15" debajo de las líneas VTY. Luego quité el cable de la consola.

Lección:

Asegúrese de establecer un tiempo de espera de 5-10 minutos en todos sus dispositivos (si no se detecta actividad).


2
En ese caso, obtendría una "conexión rechazada" como otra respuesta implícita , no "Establece la conexión" seguido de "Restablecimiento de la conexión por igual"
Jeff Schaller

1
Tener telnet disponible (demonio escuchando telnet) es una falla de seguridad bastante severa, una falla que es la razón principal por la que ssh es la consola remota preferida.
Xalorous

Usar el cliente telnet para sondear el demonio ssh en el puerto 22 no es una falla de seguridad. Usar el cliente telnet para conectarse al demonio telnet en el puerto 23 es una falla de seguridad.
Dan Anderson

0

Mi caso se configuró por error proxy de socket (que no funciona). Obtuve exactamente la misma salida ssh -vvv y un registro sshd vacío.


0

El error ssh_exchange_identification: Connection closed by remote hostpuede ocurrir por algunas razones desconocidas. Cuando estaba usando el código de Visual Studio . El mismo error ocurrió cuando traté de extraer del repositorio remoto usando el git pullcomando.

Acabo de cerrar el terminal incorporado y abrí el terminal de Ubuntu y volví a tirar. Y fue exitoso


0

Desde atrás CentOS Linux release 7.4.1708 (Core)con OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017una conexión sin puertos de filtrado tuve:

ssh_exchange_identification: conexión cerrada por host remoto

¡Y resultó que mi Raspberry Pi estaba apagada!

Estaba pensando que un host no encendido habría arrojado el error "No hay ruta al host". El Raspberry Pi está detrás de mi enrutador ISP, por lo que probablemente fue el que estaba cerrando la conexión.

Luego repetí el experimento (intentando conectar una Raspberry Pi apagada) desde otra conexión a Internet que tampoco filtraba puertos con Debian Stretch OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017y esta vez tenía lo esperado:

No hay ruta al host

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.