目次
- 1 1. Introducción
- 2 2. Configuración básica de SSH
- 3 Resumen
- 4 3. Reforzar la seguridad de SSH
- 5 Resumen
- 6 4. Configuración avanzada de SSH
- 7 Resumen
- 8 5. Solución de problemas con SSH
- 9 Resumen
- 10 6. FAQ (Preguntas frecuentes)
- 10.1 6.1 ¿Qué hacer si la conexión SSH se corta por timeout?
- 10.2 6.2 ¿Qué hacer si olvidé la contraseña y no puedo conectarme por SSH?
- 10.3 6.3 ¿Cómo usar SSH en Windows?
- 10.4 6.4 ¿Cómo configurar SSH en Ubuntu WSL (Windows Subsystem for Linux)?
- 10.5 6.5 ¿Qué medidas de seguridad adicionales aplicar después de configurar SSH?
- 10.6 6.6 ¿Cómo monitorear los logs de SSH en tiempo real en Ubuntu?
- 10.7 6.7 ¿Cómo hacer que SSH sea más práctico?
- 11 Resumen
- 12 Artículos relacionados
1. Introducción
Configurar SSH en Ubuntu es fundamental para la administración de servidores remotos. SSH (Secure Shell) es un protocolo que proporciona comunicación cifrada y segura, ampliamente utilizado para acceder a servidores a distancia, ejecutar comandos y transferir archivos. En este artículo, explicaremos en detalle cómo configurar SSH en Ubuntu, desde los pasos básicos de instalación hasta medidas avanzadas de seguridad.1.1 Razones para configurar SSH en Ubuntu
1.1.1 ¿Qué es SSH?
SSH (Secure Shell) es un protocolo diseñado para garantizar comunicaciones seguras a través de la red. Generalmente se utiliza para iniciar sesión en servidores remotos, transferir archivos y realizar túneles (port forwarding). A diferencia de Telnet o FTP, SSH cifra el contenido de la comunicación, lo que lo convierte en una opción mucho más segura.1.1.2 Casos en los que se necesita SSH en Ubuntu
Los escenarios en los que se requiere gestionar Ubuntu de forma remota incluyen los siguientes:- Administración de servidores en la nube: En servicios como AWS, GCP o Vultr, se utiliza SSH para conectarse remotamente al servidor.
- Operaciones remotas en entornos LAN: Acceder mediante SSH a servidores internos o máquinas de desarrollo para trabajar de manera remota.
- Gestión de dispositivos IoT: Controlar de forma remota dispositivos embebidos como Raspberry Pi.
2. Configuración básica de SSH
Para utilizar SSH en Ubuntu, es necesario instalar el servidor SSH (OpenSSH) y realizar los ajustes correspondientes. En esta sección explicaremos cómo instalar SSH, configurarlo de forma básica, ajustar el firewall y conectarse al servidor.2.1 Instalación y activación de OpenSSH
2.1.1 ¿Qué es OpenSSH?
OpenSSH (Open Secure Shell) es un software de código abierto que implementa el protocolo SSH. Además de la conexión remota, ofrece funciones como transferencia segura de archivos (SCP o SFTP) y reenvío de puertos.2.1.2 Instalación de OpenSSH
En Ubuntu, el servidor SSH no viene instalado por defecto. Para instalarlo, ejecute el siguiente comando:sudo apt update && sudo apt install -y openssh-server
Este comando actualiza la lista de paquetes e instala el servidor OpenSSH.2.1.3 Inicio del servidor SSH y configuración de inicio automático
Una vez completada la instalación, inicie el servidor SSH y habilite su arranque automático.sudo systemctl enable --now ssh
La opción enable
permite que el servicio SSH se inicie automáticamente al arrancar el sistema operativo.2.1.4 Verificación del funcionamiento de SSH
Para comprobar si el servidor SSH funciona correctamente, ejecute:systemctl status ssh
Si aparece una salida similar a la siguiente, significa que el servidor SSH está en ejecución:● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago
Si aparece inactive (dead)
o failed
, puede iniciarlo manualmente con:sudo systemctl start ssh
2.2 Configuración del firewall (UFW)
En Ubuntu, se incluye un firewall sencillo llamadoufw
(Uncomplicated Firewall). Para permitir conexiones SSH, es necesario configurarlo adecuadamente.2.2.1 Verificar el estado de UFW
Primero, verifique el estado actual del firewall:sudo ufw status
Ejemplo de salida (UFW deshabilitado)Status: inactive
Ejemplo de salida (UFW habilitado)Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
2.2.2 Permitir el tráfico SSH
Para permitir el puerto predeterminado de SSH22
, ejecute:sudo ufw allow ssh
O bien, especifique el número de puerto explícitamente:sudo ufw allow 22/tcp
2.2.3 Activar UFW
Si UFW está deshabilitado, actívelo con:sudo ufw enable
Al habilitar UFW, todo el tráfico entrante será bloqueado por defecto, por lo que debe asegurarse de haber permitido previamente SSH.2.2.4 Confirmar la configuración
Verifique nuevamente que la configuración del firewall esté aplicada:sudo ufw status verbose
Ejemplo de salidaStatus: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Si aparece esta salida, significa que las conexiones SSH están permitidas.2.3 Métodos básicos de conexión a SSH
Una vez confirmado que el servidor SSH está en ejecución, probaremos la conexión desde un PC cliente.2.3.1 Conexión desde Linux/macOS
En Linux o macOS, abra la terminal y ejecute:ssh usuario@IP_del_servidor
Ejemplo:ssh user@192.168.1.100
En la primera conexión, puede aparecer un mensaje de advertencia como el siguiente:The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?
Escriba yes
y presione Enter para establecer la conexión.2.3.2 Conexión desde Windows
En Windows se puede utilizar PowerShell o PuTTY para conectarse mediante SSH. Usando PowerShell Desde Windows 10 en adelante, PowerShell incluye un cliente SSH integrado. Ejecute:ssh usuario@IP_del_servidor
Usando PuTTY- Descargue e instale PuTTY desde el sitio oficial.
- Abra PuTTY y escriba la dirección IP del servidor en
Host Name (or IP address)
. - En
Connection type
, seleccioneSSH
y haga clic enOpen
. - Introduzca el nombre de usuario y la contraseña.
Resumen
En esta sección hemos explicado los pasos básicos para configurar SSH en Ubuntu:- Instalar y activar OpenSSH
- Configurar UFW para permitir SSH
- Conectarse desde Linux/macOS y Windows
3. Reforzar la seguridad de SSH
SSH es una herramienta muy útil para conexiones remotas, pero usarla sin ajustes adicionales puede aumentar los riesgos de seguridad. Los atacantes suelen emplear ataques de fuerza bruta o escaneo de puertos para dirigirse a servidores SSH. Por ello, es fundamental aplicar configuraciones de seguridad adecuadas para construir un entorno más seguro.3.1 Deshabilitar el inicio de sesión como root
De forma predeterminada, en algunos casos la configuración de SSH en Ubuntu permite el acceso como usuario root. Como la cuenta root tiene privilegios totales sobre el sistema, suele ser un objetivo de los atacantes. Prohibir el inicio de sesión directo con root y usar cuentas de usuario normales mejora la seguridad.3.1.1 Pasos de configuración
- Edite el archivo de configuración de SSH
/etc/ssh/sshd_config
.
sudo nano /etc/ssh/sshd_config
- Busque la siguiente línea y cámbiela a
PermitRootLogin no
.
PermitRootLogin no
- Guarde el archivo y reinicie el servicio SSH.
sudo systemctl restart ssh
- Verifique que el cambio esté aplicado:
sudo grep PermitRootLogin /etc/ssh/sshd_config
Si el resultado es PermitRootLogin no
, el ajuste se aplicó correctamente.3.2 Deshabilitar autenticación por contraseña e implementar autenticación por clave pública
En SSH, la autenticación con claves públicas es más segura que la autenticación por contraseña. Con este método, no se introduce una contraseña; en su lugar, se utilizan pares de claves (pública y privada). Esto reduce el riesgo de ataques de fuerza bruta.3.2.1 Generar un par de claves SSH
En el PC local, genere las claves SSH con:ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
Al finalizar, se habrán creado dos archivos:- Clave privada (
id_rsa
) → Se guarda en el PC local (no compartir nunca) - Clave pública (
id_rsa.pub
) → Se copia al servidor
3.2.2 Transferir la clave pública al servidor
Use el siguiente comando para copiar la clave pública al servidor:ssh-copy-id usuario@IP_del_servidor
3.2.3 Deshabilitar la autenticación por contraseña
Abra el archivo de configuración de SSH:sudo nano /etc/ssh/sshd_config
Busque la línea correspondiente y cámbiela a:PasswordAuthentication no
Reinicie SSH para aplicar los cambios:sudo systemctl restart ssh
3.3 Restringir el acceso SSH a usuarios específicos
Para reforzar la seguridad, se puede limitar qué usuarios están autorizados a conectarse vía SSH.3.3.1 Pasos de configuración
- Abra el archivo de configuración
/etc/ssh/sshd_config
.
sudo nano /etc/ssh/sshd_config
- Añada la siguiente línea indicando los usuarios permitidos:
AllowUsers usuario1 usuario2
- Reinicie SSH para aplicar los cambios.
sudo systemctl restart ssh
3.4 Cambiar el puerto de SSH
El puerto predeterminado de SSH (22
) es un objetivo frecuente de ataques. Cambiarlo reduce el riesgo.3.4.1 Pasos de configuración
- Abra el archivo de configuración de SSH.
sudo nano /etc/ssh/sshd_config
- Busque la línea
Port 22
y cámbiela, por ejemplo:
Port 2200
- Guarde los cambios y reinicie SSH.
sudo systemctl restart ssh
3.4.2 Actualizar la configuración del firewall
Después de cambiar el puerto, permita el nuevo en UFW:sudo ufw allow 2200/tcp
Verifique:sudo ufw status
3.5 Proteger contra ataques de fuerza bruta con Fail2Ban
Fail2Ban detecta intentos fallidos de inicio de sesión y bloquea temporalmente las IP ofensivas.3.5.1 Instalar Fail2Ban
sudo apt install fail2ban -y
3.5.2 Crear archivo de configuración
Copie el archivo predeterminado:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra el archivo:sudo nano /etc/fail2ban/jail.local
Aplique los siguientes ajustes:[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600
3.5.3 Reiniciar Fail2Ban
sudo systemctl restart fail2ban
3.5.4 Verificar la lista de bloqueos
sudo fail2ban-client status sshd
Resumen
En esta sección hemos visto cómo reforzar la seguridad de SSH:- Deshabilitar el inicio de sesión como root
- Desactivar contraseñas y usar autenticación con claves públicas
- Restringir el acceso a usuarios específicos
- Cambiar el puerto de SSH
- Usar Fail2Ban para bloquear accesos no autorizados
4. Configuración avanzada de SSH
Una vez completada la configuración básica y reforzada la seguridad, el siguiente paso es aplicar ajustes avanzados para aprovechar SSH de manera más práctica y segura. En esta sección explicamos cómo gestionarssh.socket
en Ubuntu 22.10 y versiones posteriores, crear túneles SSH (port forwarding), configurar múltiples puertos de escucha y permitir solo IP específicas.4.1 Uso de ssh.socket
en Ubuntu 22.10 o posterior
En Ubuntu 22.10 o más reciente, la gestión del servicio SSH puede realizarse a través de ssh.socket
en lugar de ssh.service
. Con este mecanismo, el servicio se inicia dinámicamente al recibir solicitudes, lo que ayuda a ahorrar recursos.4.1.1 Verificar el estado de ssh.socket
Ejecute:sudo systemctl status ssh.socket
Ejemplo de salida (habilitado)● ssh.socket - OpenSSH Server Socket
Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
Active: active (listening) since Fri 2025-02-28 12:00:00 UTC
4.1.2 Habilitar o deshabilitar ssh.socket
Para habilitarlo si está desactivado:sudo systemctl enable --now ssh.socket
Si prefiere usar ssh.service
de la manera tradicional:sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
4.2 Túneles SSH (port forwarding)
Los túneles SSH permiten establecer comunicación segura entre el servidor remoto y el PC local, evitando el uso directo de redes externas.4.2.1 Reenvío de puertos local
Muy útil para acceder de forma segura a bases de datos o servidores web remotos. Ejemplo: acceder desde el PC local a MySQL en el puerto 3306 del servidor remotossh -L 3306:localhost:3306 usuario@IP_del_servidor
4.2.2 Reenvío de puertos inverso
Permite publicar servicios internos en un servidor remoto a través de SSH. Ejemplo: exponer un servidor web local (puerto 80) en el puerto 8080 del servidor remotossh -R 8080:localhost:80 usuario@IP_del_servidor
4.2.3 Reenvío de puertos dinámico
Se puede usar SSH como un proxy SOCKS para navegar de forma anónima en Internet. Ejemplo: crear un proxy SOCKS en el puerto 1080 del PC localssh -D 1080 usuario@IP_del_servidor
4.3 Escuchar en múltiples puertos SSH
Por defecto, SSH escucha solo en un puerto (22). Configurarlo en varios puertos permite adaptarse a distintos entornos de red.4.3.1 Pasos de configuración
- Edite el archivo
/etc/ssh/sshd_config
.
sudo nano /etc/ssh/sshd_config
- Añada las siguientes líneas:
Port 22
Port 2200
- Reinicie SSH.
sudo systemctl restart ssh
- Permita el nuevo puerto en UFW.
sudo ufw allow 2200/tcp
4.4 Permitir SSH solo desde IP específicas
Una estrategia de seguridad adicional es limitar el acceso SSH únicamente a determinadas direcciones IP.4.4.1 Configurar /etc/hosts.allow
Edite el archivo:sudo nano /etc/hosts.allow
Agregue la línea (sustituya 192.168.1.100
por la IP autorizada):sshd: 192.168.1.100
4.4.2 Configurar /etc/hosts.deny
Para rechazar todas las demás IP:sudo nano /etc/hosts.deny
sshd: ALL
De esta forma, solo las IP incluidas en hosts.allow
tendrán acceso SSH.Resumen
En esta sección hemos explicado configuraciones avanzadas de SSH:- Gestión de
ssh.socket
en Ubuntu 22.10+ - Uso de túneles SSH (port forwarding) para comunicación segura
- Configuración de múltiples puertos de escucha
- Restricción de acceso SSH a IP específicas
5. Solución de problemas con SSH
Incluso después de configurar SSH, pueden surgir situaciones en las que no se pueda establecer conexión. En esta sección organizamos los problemas más comunes al conectarse vía SSH y sus soluciones.5.1 No se puede conectar a SSH
Si al intentar conectarse aparecen errores comoConnection refused
o timeout
, las causas pueden ser varias.5.1.1 El servicio SSH no está en ejecución
Es posible que el servidor SSH no se haya iniciado correctamente. Verifique el estado:sudo systemctl status ssh
Solución:- Si aparece
Active: inactive (dead)
ofailed
, reinicie el servicio.
sudo systemctl restart ssh
- Para habilitar el inicio automático después del reinicio del sistema:
sudo systemctl enable ssh
5.1.2 El puerto no está correctamente abierto
Si el puerto SSH ha sido cambiado, debe especificarlo al conectarse:ssh -p 2200 usuario@IP_del_servidor
Para confirmar los puertos en escucha:sudo netstat -tulnp | grep ssh
O bien:ss -tulnp | grep ssh
5.1.3 Revisar la configuración del firewall (UFW)
Compruebe si UFW está bloqueando la comunicación SSH:sudo ufw status
Solución si SSH no está permitido:sudo ufw allow 22/tcp
Si se cambió el puerto:sudo ufw allow 2200/tcp
5.2 Errores de autenticación
5.2.1 Nombre de usuario o contraseña incorrectos
Asegúrese de que el nombre de usuario utilizado sea correcto:ssh usuario@IP_del_servidor
5.2.2 La autenticación con clave pública no está bien configurada
Verifique que la clave pública esté en el servidor en~/.ssh/authorized_keys
:cat ~/.ssh/authorized_keys
Debe coincidir con el archivo local ~/.ssh/id_rsa.pub
.5.2.3 Permisos incorrectos en el directorio .ssh
SSH exige permisos estrictos en los archivos de claves y el directorio:chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
También verifique los permisos del directorio personal:chmod 755 /home/usuario
5.3 Conexión SSH inestable o desconexiones frecuentes
Si la conexión SSH se corta tras un tiempo, puede deberse a configuraciones de tiempo de espera en el servidor o en el cliente.5.3.1 Ajustar ClientAliveInterval
Edite el archivo /etc/ssh/sshd_config
y añada o modifique:ClientAliveInterval 60
ClientAliveCountMax 3
Reinicie SSH:sudo systemctl restart ssh
5.3.2 Cambiar la configuración en el cliente
En el archivo local~/.ssh/config
, añada:Host *
ServerAliveInterval 60
ServerAliveCountMax 3
5.4 Revisión de logs de SSH
Para solucionar problemas, es importante revisar los registros.5.4.1 Ver registros en tiempo real
sudo journalctl -u ssh -f
5.4.2 Consultar registros anteriores
sudo cat /var/log/auth.log | grep ssh
O filtrar mensajes de error específicos:sudo grep "Failed password" /var/log/auth.log
Resumen
En esta sección hemos visto los problemas más frecuentes y sus soluciones:- Verificar si el servicio SSH está en ejecución
- Comprobar que los puertos estén abiertos
- Revisar la configuración del firewall
- Confirmar la configuración de la autenticación con claves
- Ajustar parámetros de tiempo de espera
- Analizar los registros de SSH para identificar errores
6. FAQ (Preguntas frecuentes)
En esta sección se presentan preguntas frecuentes sobre la configuración y el uso de SSH, junto con sus soluciones. Estos consejos le ayudarán a usar SSH de forma más cómoda y segura.6.1 ¿Qué hacer si la conexión SSH se corta por timeout?
Si la conexión SSH se interrumpe tras un tiempo, pruebe estos ajustes.6.1.1 Cambiar la configuración en el servidor
Edite/etc/ssh/sshd_config
y añada:ClientAliveInterval 60
ClientAliveCountMax 3
Reinicie SSH:sudo systemctl restart ssh
6.1.2 Cambiar la configuración en el cliente
En el archivo local~/.ssh/config
añada:Host *
ServerAliveInterval 60
ServerAliveCountMax 3
6.2 ¿Qué hacer si olvidé la contraseña y no puedo conectarme por SSH?
6.2.1 Si tiene acceso físico al servidor
- Inicie en modo de usuario único (seleccione
recovery mode
en GRUB). - Restablezca la contraseña con:
passwd usuario
- Reinicie el sistema.
6.2.2 Si no tiene acceso físico (como en un VPS en la nube)
- Use la consola del proveedor de VPS para conectarse.
- Habilite la autenticación por clave pública.
6.3 ¿Cómo usar SSH en Windows?
6.3.1 Usando PowerShell
Desde Windows 10, PowerShell incluye un cliente SSH integrado:ssh usuario@IP_del_servidor
6.3.2 Usando PuTTY
- Descargue e instale PuTTY.
- Introduzca la IP del servidor en
Host Name (or IP address)
. - Seleccione
SSH
enConnection type
y haga clic enOpen
. - Introduzca usuario y contraseña.
6.4 ¿Cómo configurar SSH en Ubuntu WSL (Windows Subsystem for Linux)?
Para configurar SSH en WSL:6.4.1 Instalar el servidor SSH
sudo apt update && sudo apt install openssh-server
6.4.2 Cambiar la configuración de SSH
Edite/etc/ssh/sshd_config
y habilite:PasswordAuthentication yes
Como WSL no usa systemd
por defecto, inicie SSH manualmente:sudo service ssh start
6.5 ¿Qué medidas de seguridad adicionales aplicar después de configurar SSH?
6.5.1 Instalar Fail2Ban
Para proteger contra accesos no autorizados:sudo apt install fail2ban -y
Edite /etc/fail2ban/jail.local
y active la protección:[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
Reinicie Fail2Ban:sudo systemctl restart fail2ban
6.5.2 Cambiar el puerto de SSH
Edite/etc/ssh/sshd_config
y modifique:Port 2200
Luego reinicie SSH y permita el puerto en UFW:sudo ufw allow 2200/tcp
6.6 ¿Cómo monitorear los logs de SSH en tiempo real en Ubuntu?
Para ver registros en tiempo real:sudo journalctl -u ssh -f
Para consultar registros anteriores:sudo cat /var/log/auth.log | grep ssh
6.7 ¿Cómo hacer que SSH sea más práctico?
6.7.1 Inicios de sesión rápidos con .ssh/config
Guarde configuraciones en ~/.ssh/config
:Host miservidor
HostName 192.168.1.100
User usuario
Port 2200
IdentityFile ~/.ssh/id_rsa
Luego podrá conectarse simplemente con:ssh miservidor
6.7.2 Usar ssh-agent
Para evitar introducir la passphrase de la clave privada cada vez:eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Resumen
En esta sección hemos visto preguntas y soluciones comunes sobre SSH:- Solución de desconexiones por timeout
- Cómo recuperar acceso si se olvida la contraseña
- Uso de SSH en Windows y WSL
- Medidas adicionales de seguridad
- Revisión de logs de SSH
- Consejos para hacer SSH más práctico
Artículos relacionados
Artículos
1. Introducción Al utilizar SSH en Ubuntu, es posible acceder y administrar de manera segura un servidor o PC de forma […]