¿Cómo arreglar el error "Connection refused" de SSH?
Este tutorial abarca los siguientes temas:
El error “Connection refused” de SSH ocurre cuando intentas conectarte a un servidor SSH (Secure Socket Shell), pero la conexión falla.
SSH es un protocolo de red que te permite ejecutar numerosas tareas a través de una conexión cifrada y segura. Al igual que FTP, puedes usarlo para subir, descargar o editar archivos.
Sin embargo, a través de SSH puedes realizar tareas mucho más avanzadas. Puedes ejecutar varios scripts y comandos directamente en el servidor a través de una interfaz de línea de comandos. Para obtener más información, lee esta guía detallada de SSH.
No encontrarás este error en tu navegador mientras visitas sitios. La conexión SSH se establece entre un cliente SSH instalado en tu ordenador y un programa de servidor SSH (también llamado daemon) instalado en un servidor de alojamiento web. Por lo tanto, el lugar más común donde verás este error es en un programa cliente SSH.
A continuación puedes ver un ejemplo del error “SSH port 22 Connection refused” en el Terminal en un ordenador Mac.
Del mismo modo, verás el error en la Terminal si eres un usuario de Linux. El siguiente ejemplo es de un sistema operativo Linux/CentOS.
Los usuarios de Windows normalmente verán el error en el popular cliente SSH PuTTY. PuTTY puede mostrar otra variación del error – “Connection timed out”.
¿Cuáles son las razones del error “Connection refused” en SSH y cómo solucionarlos?
Aunque el mensaje de error en si no es muy informativo del problema, hay algunas causas comunes. Repasaremos cada caso y su solución.
Tu ordenador local no tiene un cliente SSH instalado
Para establecer una conexión SSH, tu ordenador debe tener un programa llamado cliente SSH. Te permite comunicarte con un servidor remoto y ejecutar comandos SSH. Si falta el programa, verás el error “Connection refused” de SSH.
Una forma sencilla de determinar si tu ordenador tiene SSH instalado es ejecutar el siguiente comando en la Terminal.
$ ssh
Si SSH está instalado, la respuesta en el Terminal será una lista de comandos disponibles. De lo contrario, la salida será “command not found”.
Los usuarios de Mac no necesitan instalar un cliente SSH. Todas las versiones modernas de macOS tienen un paquete SSH preinstalado, y puedes ejecutarlo desde la herramienta Terminal.
En Linux, también puedes ejecutar SSH desde la Terminal. Sin embargo, no hay un cliente SSH incorporado por defecto, por lo que debes instalarlo adicionalmente.
Dependiendo de tu distribución, puedes instalar el paquete OpenSSH para el sistema operativo Linux ejecutando los comandos específicos en Terminal.
Para instalar OpenSSH en la distribución Ubuntu/Debian, ejecuta el siguiente comando.
$ sudo apt install openssh-client
Para distribuciones de CentOS / RHEL, usa este comando.
$ sudo yum install openssh-clients
Windows tampoco tiene un cliente SSH por defecto, por lo que tendrás que instalarlo tú mismo.
En versiones anteriores de Windows, OpenSSH no es compatible directamente. Por lo tanto, necesitas instalar un programa cliente que te permita establecer una conexión SSH. El más popular es PuTTY. Para obtener instrucciones detalladas, lee esta guía sobre cómo instalar y usar PuTTY.
Desde Windows 10 (build1809) en adelante, no necesitas un cliente dedicado para el acceso SSH. Puedes instalar y ejecutar OpenSSH en Command Prompt o PowerShell. Para obtener instrucciones detalladas, consulta la documentación oficial sobre cómo instalar OpenSSH en Windows.
Tu servidor de alojamiento web no tiene un SSH daemon instalado
Tener un cliente SSH en tu ordenador local es un requisito previo importante para una conexión SSH. Sin embargo, el servidor de alojamiento de tu sitio web también debe tener instalado un programa de servidor SSH. Se llama SSH daemon y sirve para monitorizar y autorizar conexiones SSH.
Si intentas conectarte a un servidor al que le falta un SSH daemon, también recibirás el mensaje “Connection refused”. La mayoría de los proveedores de hosting administrado tienen servidores SSH preinstalados por defecto. Los clientes de SiteGround tienen SSH habilitado en todos los planes.
Ponte en contacto con tu proveedor de alojamiento para asegurarse de que el SSH daemon esté instalado en tu servidor. Tal vez el SSH daemon esté configurado, pero actualmente no funciona. El soporte de tu hosting podrá comprobar su configuración y proporcionar más información.
En caso de que estés administrando tu propio servidor dedicado o localhost, necesitas instalar el paquete de SSH daemon.
Para instalar el servidor OpenSSH, puedes usar las siguientes guías.
- Cómo instalar el servidor OpenSSH en Linux Ubuntu/Debian
- Cómo instalar el servidor OpenSSH en Windows
- Cómo instalar el paquete OpenSSH en Linux CentOS / RHEL
Un firewall está bloqueando el puerto SSH
Para manejar los datos y el tráfico de diferentes servicios de manera eficiente, los sistemas operativos usan puertos. Los puertos son puntos finales de software diseñados para manejar datos solo de servicios específicos. Por ejemplo, tu aplicación de correo usa un puerto para enviar correos a través de SMTP y otro puerto para recibir mensajes entrantes a través de IMAP o POP3.
El servicio SSH también usa puertos dedicados para intercambiar datos. Por defecto, el puerto es 22. Sin embargo, muchos proveedores de hosting usan un puerto SSH personalizado en su lugar. El puerto SSH en SiteGround es 18765.
Si no estás seguro del puerto, puedes ejecutar cualquiera de los siguientes comandos en tu servidor.
$ grep Port /etc/ssh/ssh_config
o
$ grep Port /etc/ssh/sshd_config
La salida del comando mostrará el puerto SSH. En el siguiente ejemplo, el sistema indica que es 22.
Cada puerto abierto se considera una vulnerabilidad potencial que se podría explotar. Por lo tanto, un firewall puede estar bloqueando el puerto SSH. La mayoría de las veces, las reglas de firewall más restrictivas se establecen en la oficina, VPN y redes públicas, como universidades, aeropuertos o bibliotecas Wi-Fi.
Si estás usando una red de este tipo y recibes este error, prueba a conectarte a SSH desde otra red. Idealmente, intenta hacerlo desde el Wi-Fi de tu casa, que debería ser menos restrictivo. Si todavía no puedes conectarte a SSH, comprueba la configuración de tu firewall y asegúrate de permitir las conexiones para los puertos 22 y 18765 (para SiteGround).
Otra posibilidad es que el bloqueo provenga del servidor de hosting. Puedes usar credenciales incorrectas y acumular intentos de inicio de sesión fallidos. Por lo tanto, el firewall del servidor puede bloquear tu IP para conexiones en el puerto SSH. Contacta con tu proveedor de hosting, para que puedan comprobar tu IP y desbloquearla, si ese es el caso.
Credenciales o puerto incorrectos de SSH
Necesitas varias credenciales para conectarte desde tu cliente SSH a un servidor. Si alguno de los ajustes es incorrecto, el servidor devolverá el mensaje “Connection refused”.
Cualquier conexión SSH requiere los siguientes detalles:
- Nombre de host – esta es la dirección del servidor. Podría ser tu dirección IP, el nombre del servidor o el dominio de tu sitio web (si el registro A del dominio apunta al servidor).
- Usuario SSH – el nombre de usuario del servidor SSH del sitio web.
- Contraseña – es importante tener en cuenta que el usuario de SSH no tiene una contraseña. La contraseña solicitada es el passphrase de tu clave SSH privada. Obtén más información sobre las claves SSH.
- Puerto – el puerto predeterminado para las conexiones SSH es el puerto 22. Sin embargo, en aras de una mejor seguridad, muchos proveedores de hosting usan un puerto SSH personalizado en lugar del predeterminado. El puerto para SSH en SiteGround es 18765.
Para asegurarte de tener los datos correctos, accede al panel de control de tu hosting. Debería haber una sección donde se enumeran las credenciales SSH.
Los usuarios de SiteGround pueden encontrar las credenciales en Site Tools. Abre la sección “Sitios web” de tu Área de Cliente. Accede al Site Tools para el sitio en particular y navega a la sección DESARROLLADORES, luego selecciona Gestor claves SSH. En esta página, puedes ver el usuario SSH, el nombre de host y el puerto en Credenciales SSH.
El servicio SSH está caído
La mayoría de las soluciones enumeradas hasta ahora ayudan si el problema se origina en tu dispositivo o red local. Si ninguna ha funcionado, el error puede deberse a un problema en curso en el servidor de alojamiento.
El servicio SSH puede estar caído, si el servidor está sobrecargado debido a recursos insuficientes o picos de tráfico masivos. Ponte en contacto con el soporte de tu proveedor de alojamiento, para que puedan comprobar el estado del servicio SSH y proporcionar más información.
Si administras tu propio servidor dedicado o localhost, es posible que necesites comprobar el estado del servidor SSH. Puede estar instalado, pero no activado.
Para activar el servidor SSH, ejecuta el siguiente comando SSH en la Terminal.
$ sudo service ssh start
Si necesitas reiniciar el servidor SSH, usa el comando a continuación.
$ sudo service ssh restart
Resumen
SSH es extremadamente útil en muchas situaciones y proporciona una amplia gama de funciones para usuarios avanzados. No hace falta decir que es frustrante cuando un servicio tan esencial no funciona. Sin embargo, el error “Connection refused” se reduce a un número limitado de posibles causas.
Esta guía ha examinado las más comunes. Pasar por las soluciones mencionadas anteriormente debería ayudarte a corregir el error.
Otro error relacionado con las conexiones SSH es “Permission denied”. Obtén más información al respecto y cómo solucionarlo en esta guía sobre el error “Permission denied (publickey)” cuando se conecta a través de SSH.
Para conocer los pasos detallados sobre cómo conectarte a SSH, lee este artículo sobre cómo acceder a tu sitio a través de una conexión SSH.