¿Qué es SSH?
SSH son las siglas de Secure Shell, un protocolo de red diseñado para permitir el acceso remoto a una terminal de manera segura. A diferencia de su antecesor, Telnet, el tráfico que utiliza SSH está cifrado, lo que garantiza la confidencialidad e integridad de los datos transmitidos. Este protocolo es ampliamente utilizado para la administración remota de dispositivos, como servidores, routers y switches.
SSH está disponible para una variedad de sistemas operativos, incluyendo Windows, Linux y macOS. Su mecanismo de cifrado se basa en 128 bits, lo que proporciona un alto nivel de seguridad y hace extremadamente difícil que un intruso pueda descifrar el contenido del tráfico. Esto lo convierte en una herramienta esencial para gestionar sistemas de manera remota de forma segura.
Instalación y Configuración de SSH
Supongamos que deseas instalar SSH para permitir conexiones seguras al servidor HOST001 y restringir el acceso únicamente a los usuarios del grupo ITGROUP. A continuación, se describe cómo hacerlo paso a paso.
1. Instalar SSH
En un sistema operativo Ubuntu Server, la instalación del servicio SSH se realiza utilizando el gestor de paquetes APT de la siguiente manera:
sudo apt update
sudo apt install openssh-server
2. Habilitar y arrancar el servicio SSH
El comando systemctl
permite habilitar y gestionar servicios en sistemas Linux. Para habilitar el servicio SSH y asegurarte de que se inicie automáticamente al arrancar el sistema, utiliza el siguiente comando:
sudo systemctl enable ssh
Para iniciar el servicio SSH inmediatamente, ejecuta:
sudo systemctl start ssh
Una vez completado este paso, el servicio SSH estará en ejecución en tu servidor. Puedes conectarte desde un cliente SSH en Windows, como MobaXTerm, de la siguiente manera:
Configuración avanzada de SSH
Hasta este punto, hemos realizado una instalación básica de SSH. Sin embargo, para mejorar la seguridad, es recomendable implementar configuraciones adicionales, como el uso de claves públicas y privadas para autenticación, restringir el acceso al usuario root y limitar las conexiones a usuarios pertenecientes al grupo ITGROUP.
Orden de prioridad de las configuraciones de SSH
Antes de continuar, es importante comprender cómo se aplican las configuraciones de SSH y en qué orden se priorizan:
Configuraciones definidas en la línea de comandos.
Configuraciones definidas en el archivo SSH a nivel de usuario (
~/.ssh/config
).Configuraciones definidas en el archivo de configuración global (
/etc/ssh/ssh_config
).
Configuraciones en la línea de comandos
Las configuraciones a nivel de línea de comandos son útiles cuando solo necesitas aplicar una opción específica temporalmente. Por ejemplo, si deseas conectarte como el usuario root en lugar de un usuario normal como steve, puedes usar el siguiente comando:
ssh -o "User=root" dev
Otra opción útil es la bandera -F
, que permite especificar un archivo de configuración alternativo en lugar del predeterminado:
ssh -F /ruta/al/archivo/config user@example.com`
Si deseas que SSH ignore todas las configuraciones definidas en los archivos de configuración, puedes usar:
ssh -F /dev/null user@example.com`
Configuraciones a nivel de usuario
Estas configuraciones se almacenan en el archivo ~/.ssh/config
, que se crea la primera vez que un usuario utiliza SSH. El archivo sigue la siguiente estructura:
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value`
La directiva Host
puede contener un patrón o una lista de patrones separados por espacios. Cada patrón puede incluir:
*
: Coincide con cero o más caracteres. Por ejemplo,Host *
coincide con todos los hosts, mientras que192.168.0.*
coincide con hosts en la subred192.168.0.0/24
.?
: Coincide exactamente con un carácter. Por ejemplo,Host 10.10.0.?
coincide con todos los hosts en el rango10.10.0.[0-9]
.!
: Cuando se usa al inicio de un patrón, niega la coincidencia. Por ejemplo,Host 10.10.0.* !10.10.0.5
coincide con cualquier host en la subred10.10.0.0/24
, excepto10.10.0.5
.
Ejemplo de configuración:
Host 192.168.243.129
User s_user001
Port 2222
Algunas otras configuraciones que se pueden agregar aquí
Una vez comprendido lo anterior, procederemos a configurar el archivo global de SSH (/etc/ssh/sshd_config
) para mejorar la seguridad y restringir el acceso. Agregaremos o modificaremos las siguientes opciones:
Port 2222 # Cambiar el puerto por defecto
PermitRootLogin no # No permitir el Acceso a Root
MaxAuthTries 3 # Intentos antes de rechazar la conexion
MaxSessions 4 # Un maximo de conexiones
PubkeyAuthentication yes # Habilitar la autentitacion por PubKey
PasswordAuthentication no # Deshabilitar la conexion por contraseña
PermitEmptyPasswords no # No permitir una contraseña en blanco
AllowGroups ITGROUP # Permitir solo la conexion a un grupo
Una vez configurado el archivo /etc/ssh/sshd_config
, lo que necesitamos es generar un par de llaves publicas y privadas.
Generación de claves SSH
En nuestra máquina local, generamos un par de claves SSH (pública y privada) utilizando el siguiente comando:
ssh-keygen -t rsa -b 4096 -C "s_user001@s-ubuntu.com"
El proceso generará una clave RSA de 4096 bits y solicitará una ubicación para guardarla y una frase de contraseña (opcional). El resultado será similar a este:
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_rsa
Your public key has been saved in ~/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:a/HhmtNbZU2wSLO9Zh8+74iPfynEzGem3kdVXlzq39A s_user001@s-ubuntu.com
The key's randomart image is:
+---[RSA 4096]----+
| o ..o|
| . = ++|
| o +.+|
| . =o|
| S . + O.E|
| = . X.B+|
| o.o o =+=|
| ..o.. =.o=|
| o...++=++|
+----[SHA256]-----+
verificamos que efectivamente las llaves existen y se crearon
~ took 8s
❯ ls .ssh\id_*
╭───┬─────────────────┬──────┬────────┬───────────────╮
│ # │ name │ type │ size │ modified │
├───┼─────────────────┼──────┼────────┼───────────────┤
│ 0 │ .ssh\id_rsa │ file │ 3.3 kB │ 2 minutes ago │
│ 1 │ .ssh\id_rsa.pub │ file │ 749 B │ 2 minutes ago │
╰───┴─────────────────┴──────┴────────┴───────────────╯
Copiar la clave pública al servidor
Si nuestra máquina local es Linux, podemos usar la utilidad ssh-copy-id
para copiar la clave pública al servidor:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@tuserver -p 2222
En Windows, debemos enviar la clave pública manualmente utilizando el siguiente comando:
❯ bat .ssh/id_rsa.pub | ssh usuario@tuserver "cat >> .ssh/authorized_keys"
Conexión SSH sin contraseña
Una vez configurado, podemos conectarnos al servidor utilizando solo las claves SSH, sin necesidad de contraseña:
❯ ssh 192.168.243.129
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-52-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Fri Feb 14 03:13:48 PM UTC 2025
System load: 0.01 Processes: 244
Usage of /: 36.6% of 18.53GB Users logged in: 0
Memory usage: 3% IPv4 address for ens33: 192.168.243.129
Swap usage: 0%
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
193 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
s_user001@s-ubuntu:~$
Con esta configuración, logramos que solo los usuarios pertenecientes al grupo ITGROUP puedan conectarse al servidor. Además, restringimos el acceso para que únicamente se permita la conexión mediante claves públicas y privadas, lo que mejora significativamente la seguridad del servidor al eliminar la dependencia de contraseñas y reducir el riesgo de ataques de fuerza bruta.
Referencias
Linuxize. (2021, February 8). Using the SSH config file. Linuxize. https://linuxize.com/post/using-the-ssh-config-file/