OpenSSH

ssh: connect to host ... port 22: Connection refused

El error llega de inmediato, sin esperar. Algo ha contestado al puerto y ha dicho que no: es distinto de un tiempo de espera agotado, que significa que no contestó nadie.

«Connection refused» es una respuesta activa, así que la red llega hasta el servidor. Si en su lugar sale «Connection timed out», el problema está antes: cortafuegos de red, grupo de seguridad o la máquina apagada.

Qué comprobar, y en qué orden

En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.

  1. 1

    El servicio SSH no está corriendo. Ojo con la activación por socket: desde Ubuntu 22.10 sshd lo levanta ssh.socket bajo demanda, y ver ssh.service inactivo no significa que esté caído.

    Comprobar

    sudo systemctl status ssh || sudo systemctl status sshd
    systemctl is-enabled ssh.socket 2>/dev/null

    Corregir

    sudo systemctl start ssh && sudo systemctl enable ssh
    # Si la máquina usa activación por socket, el que tiene que estar activo
    # es ssh.socket:
    #   sudo systemctl enable --now ssh.socket
  2. 2

    Escucha en otro puerto. Es habitual tras endurecer el servidor y olvidarlo.

    Comprobar

    sudo ss -tlnp | grep -E 'sshd|systemd'

    Corregir

    ssh -p 2222 usuario@servidor
  3. 3

    Solo escucha en una interfaz. Con ListenAddress a 127.0.0.1 no acepta nada de fuera.

    Comprobar

    sudo sshd -T | grep -i 'listenaddress\|^port'

    Corregir

    # Quitar o corregir ListenAddress en /etc/ssh/sshd_config
    sudo sshd -t && sudo systemctl restart ssh
  4. 4

    El cortafuegos local rechaza el puerto en vez de descartarlo. Un REJECT da «refused»; un DROP daría tiempo de espera agotado.

    Comprobar

    sudo ufw status verbose 2>/dev/null || sudo nft list ruleset | grep -A5 'chain input'

    Corregir

    sudo ufw allow 22/tcp
  5. 5

    El servicio falló al arrancar y systemd lo dejó parado, normalmente por un error de sintaxis en sshd_config.

    Comprobar

    sudo sshd -t

    Corregir

    # Corregir lo que indique sshd -t y después:
    sudo systemctl restart ssh

Un detalle que ahorra tiempo

Antes de reiniciar SSH desde una sesión SSH, deja abierta una segunda sesión. Si la configuración nueva impide entrar, esa sesión es la única forma de arreglarlo sin consola física.

Los comandos de esta página se ejecutan en tu servidor y algunos modifican la configuración: léelos antes de pegarlos. Las rutas y los nombres de servicio varían entre distribuciones. Así se elabora este catálogo.