SSH es un protocolo de capa de aplicación que se utiliza comúnmente para el acceso remoto. En este artículo, analizaremos cómo usar el protocolo SSH para conectarse a servidores Linux remotos y cómo configurar ciertos parámetros para mejorar la seguridad.
SSH puede utilizarse con cualquier distribución de Linux, ya que está habilitado de forma predeterminada en la mayoría de los sistemas Unix y Linux modernos.
En esta guía, todas las pruebas se realizaron en Ubuntu 22.04; sin embargo, también puede aplicarse a otras distribuciones como Debian, CentOS, etc.
Puedes utilizar varios programas cliente para conectarte a servidores Linux a través de SSH. Algunos de los más populares son:
Windows: PuTTY, Bitvise SSH Client, SuperPuTTY, mRemoteNG, MobaXterm
macOS: Termius o la utilidad SSH integrada en Terminal
Windows (Windows 10, Windows 11, Windows Server 2019): el cliente OpenSSH integrado, accesible desde la línea de comandos (cmd) o PowerShell
La sintaxis estándar del comando SSH es la siguiente:
ssh <usuario@IP_o_dominio>
Por ejemplo:
ssh alex@166.1.227.189
De forma predeterminada, SSH se conecta a través del puerto 22. Si el servidor utiliza un puerto diferente, especifícalo con la opción -p:
ssh alex@166.1.227.189 -p 2222
El archivo de configuración del servidor SSH se llama sshd_config y se encuentra en el directorio /etc/ssh. No debe confundirse con el archivo del cliente SSH ssh_config. En este artículo nos centraremos únicamente en el archivo del servidor.
De forma predeterminada, las conexiones SSH se basan en contraseñas, a menos que se haya añadido una clave SSH durante la creación del servidor (las claves SSH se explican en la siguiente sección). En la mayoría de las distribuciones Linux/Unix, la configuración del servidor incluye autenticación PAM, lo que permite a los usuarios con cuentas del sistema iniciar sesión usando su nombre de usuario y contraseña.
Para iniciar sesión con contraseña, necesitas la dirección del servidor remoto y las credenciales del usuario, por ejemplo:
ssh alex@166.1.227.189
Después de ejecutar el comando, se te pedirá la contraseña. Si es correcta, accederás al servidor.
Al conectarte por primera vez, verás un mensaje sobre la “huella digital” del servidor. Escribe yes para continuar.
Aunque la autenticación por contraseña funciona, no es el método más seguro, ya que las contraseñas pueden ser adivinadas. Una alternativa más segura es el uso de claves SSH, que se describe en la siguiente sección.
Las claves SSH son un método de autenticación más seguro y común que las contraseñas. SSH utiliza dos tipos de claves:
Clave pública: se utiliza para el cifrado y puede compartirse públicamente
Clave privada: se utiliza para el descifrado y debe mantenerse en secreto
Para generar claves SSH, utiliza el siguiente comando:
ssh-keygen
El comando te pedirá que elijas un directorio para guardar las claves. De forma predeterminada, se almacenan en el directorio .ssh de tu carpeta personal, por ejemplo /home/alex/.ssh. Pulsa Enter para usar la ruta predeterminada.
A continuación, se te pedirá que establezcas una frase de paso (passphrase) para mayor seguridad. Si prefieres no usar una, pulsa Enter cuando se te solicite.
Una vez generadas las claves, la clave privada (id_rsa) y la clave pública (id_rsa.pub) se almacenarán en el directorio .ssh.
Antes de conectarte a un host remoto, copia la clave pública a ese host utilizando el comando ssh-copy-id:
ssh-copy-id -i /home/alex/.ssh/id_rsa.pub alex@166.1.227.189
Se te pedirá que introduzcas la contraseña del usuario remoto una sola vez. Después, la clave pública se añadirá al host remoto y podrás iniciar sesión sin contraseña:
ssh alex@166.1.227.189
Si no se solicita ninguna contraseña, la autenticación basada en claves está funcionando correctamente.
Dado que las contraseñas no son seguras, se recomienda deshabilitar la autenticación por contraseña y utilizar únicamente el acceso basado en claves. Para ello, edita el archivo de configuración del servidor SSH:
nano /etc/ssh/sshd_config
Busca la línea PasswordAuthentication y cambia su valor a no:
PasswordAuthentication no
Guarda los cambios y reinicia el servidor SSH:
systemctl restart ssh
Importante: Antes de deshabilitar la autenticación por contraseña, asegúrate de que la autenticación basada en claves funciona correctamente. De lo contrario, podrías quedarte sin acceso al servidor. Si esto ocurre, puedes restaurar la autenticación por contraseña mediante la consola web del servidor.
De forma predeterminada, el servidor SSH utiliza el puerto 22. Puedes cambiarlo editando el archivo sshd_config. Busca la línea Port, elimina el símbolo # y especifica un nuevo puerto (entre 1024 y 65535):
Port 2224
Guarda los cambios y reinicia el servidor SSH:
systemctl restart ssh
Para conectarte al servidor usando el nuevo puerto, utiliza la opción -p:
ssh alex@166.1.227.189 -p 2224
En algunas distribuciones, el inicio de sesión como root está permitido de forma predeterminada. Dado que el usuario root tiene privilegios completos del sistema, es más seguro deshabilitar este acceso. Busca la línea PermitRootLogin en el archivo sshd_config y establécela en no:
PermitRootLogin no
Guarda el archivo y reinicia el servidor SSH:
systemctl restart ssh
Puedes restringir el acceso SSH a usuarios específicos editando el archivo sshd_config con los siguientes parámetros:
AllowUsers: especifica qué usuarios pueden conectarse mediante SSH. Por ejemplo:
AllowUsers test admin
DenyUsers: especifica qué usuarios tienen prohibido el acceso SSH. Por ejemplo:
DenyUsers nginx websrv
Para aplicar los cambios, reinicia el servidor SSH:
systemctl restart ssh
SSH es una herramienta indispensable para conectarse a servidores remotos. Además del cifrado integrado, puedes reforzar la seguridad de tu servidor SSH configurándolo correctamente, por ejemplo, deshabilitando la autenticación por contraseña y limitando el acceso a usuarios específicos.