desarrollo-web-br-bd.com

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

Estoy no usando hosts.allow o hosts.deny, más SSH funciona desde mi máquina con Windows (misma computadora portátil, disco duro diferente) pero no desde mi máquina Linux.

ssh -vvv [email protected] -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 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 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é?

[[email protected] ~]$ cat .ssh/known_hosts 
[[email protected] ~]$ 

Entonces ese no es el problema ...

[[email protected] ~]$ 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).

[[email protected] ~]$ 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_config con el mismo resultado, excepto por una gran cantidad de configuración automática en el cliente que termina con el mismo error.

88
Torxed

Publicado originalmente en Ask Ubunt

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 sshd sin dejar que demonice. El problema en mi caso fue que ni syslog ni auth.log Mostraron algo 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 el $(which sshd) es el mejor método para satisfacer el requisito sshd de una ruta absoluta. De lo contrario, obtendrá el siguiente error: sshd re-exec requires execution with an absolute path. El -p 10222 Hace que sshd escuche en ese puerto alternativo, anulando el archivo de configuración; esto es para que no choque con las instancias potencialmente ejecutadas de sshd. Asegúrese de elegir un puerto libre aquí.

Finalmente: conéctese al puerto alternativo (ssh -p 10222 [email protected]).

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 en stdout, use $(which sshd) -Ddddp 10222 (tenga en cuenta el agregado dd para aumentar la verbosidad). Para obtener más información sobre depuración, consulte man sshd.


La principal ventaja de este método es que le permite verificar la configuración de sshd sin tener que reiniciar el sshd en el puerto predeterminado. ¡Normalmente esto no debería interferir con las conexiones SSH existentes, pero lo he visto. Entonces, esto permite validar el archivo de configuración antes de, potencialmente, cortar el acceso a un servidor remoto (por ejemplo, tengo eso para algunos VPS e incluso para servidores físicos donde necesito pagar extra para obtener acceso fuera de banda a la máquina).

66
0xC0000022L

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.

13
gerrit_hoekstra

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.

8
txomon

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.

6
NvipiN

Me encontré con el ssh_exchange_identification: read: Connection reset by peer problema 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 [email protected]$Host "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done
5
duanev

Recibí el error ssh_exchange_identification: Connection closed by remote Host al 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 se mostró simplemente porque no recordaba que desactivé el servicio SSH en el inicio, así que tuve que iniciar el servicio SSH en mi computadora local: Sudo service ssh start.

3
baptx

O tal vez hiciste 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 ... ¿¿¿De Verdad???

3
crashulater

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).

1
Oumar

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

0
clarkttfu

Recibí un error similar al intentar ssh con el usuario root, en un contenedor creado recientemente:

ssh [email protected] -p 8022  
  ssh_exchange_identification: Connection closed by remote Host

# local port 8022 is redirected to container ssh port 22

Aparentemente, sucedió porque suario ("root" en mi caso) no tenía una contraseña.

Una vez que agregué la contraseña del usuario y reinicié sshd (dentro del contenedor):

echo 'root:<PASSWORD>' | Sudo chpasswd
Sudo service ssh restart

Entonces podría meterme en el contenedor.

0
Noam Manos

De con CentOS Linux release 7.4.1708 (Core) con OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 detrás de una conexión que no filtra los puertos que tenía:

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 con OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017 y esta vez tuve lo esperado:

No hay ruta al host

0

El error ssh_exchange_identification: Connection closed by remote Host puede ocurrir por algunas razones desconocidas. Cuando estaba usando código de Visual Studio. El mismo error ocurrió cuando intenté obtener un repositorio remoto usando git pull comando.

Acabo de cerré el terminal incrustado y abrí terminal de Ubuntu y volví a tirar. Y fue exitoso

0
Mohammed Shareef C