En la publicación anterior revisamos el uso básico del comando `ssh` y sus opciones útiles. Sin embargo, introducir manualmente cada dirección IP, nombre de usuario y número de puerto resulta tedioso. En estos casos, el **archivo de configuración SSH** es la solución perfecta. Almacena la información de los servidores que usas con frecuencia y te permite conectarte con un simple alias, como si fueran marcadores. Yo mismo, en mis días de "total novato", solía registrar los comandos que usaba en `.bashrc` como alias. Cuando descubrí el archivo `config`, me di cuenta de lo ingenuo que era. ![Me sorprendiendo al descubrir el archivo SSH config](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## ¿Qué es el archivo de configuración SSH? {#sec-481141e7802b} El **archivo de configuración SSH** es un fichero que permite personalizar el comportamiento del cliente SSH. Al guardar la información de conexión (usuario, puerto, clave, etc.) para cada host, puedes conectarte más tarde usando solo un alias. * **Ubicación:** Normalmente se encuentra en `~/.ssh/config`. Si acabas de instalar SSH, es posible que no exista; en ese caso, créalo. * **Creación del archivo:** Si no existe `~/.ssh/config`, créalo y asegúrate de que los permisos sean `600`. ```bash touch ~/.ssh/config chmod 600 ~/.ssh/config # ¡Los permisos son obligatorios por seguridad! ``` --- ## Reglas para escribir el archivo de configuración {#sec-a6ba2fff88f5} El archivo es un texto plano. Cada host se define con la palabra clave `Host` y se escribe en bloque. #### Estructura básica ```bash Host [alias] [opción1] [valor1] [opción2] [valor2] ... ``` * **`Host [alias]`**: Indica el inicio del bloque y define el alias que usarás. En lugar de un alias, también puedes colocar la dirección real (IP o dominio) y usar comodines (`*`, `?`). * **Indentación:** Las opciones bajo `Host` deben estar indentadas. Puedes usar espacios o tabulaciones, pero mantén la consistencia. * **Opciones:** Se listan las opciones SSH que se aplicarán al usar ese alias. Son equivalentes a los parámetros `ssh -opción`. ### Opciones más usadas {#sec-488803d47bdf} | Opción | Descripción | Valor de ejemplo | | --- | --- | --- | | `HostName` | Dirección IP o dominio del servidor real | `192.168.1.100` o `example.com` | | `User` | Nombre de usuario remoto | `ubuntu`, `ec2-user`, `root` | | `Port` | Puerto SSH del servidor (22 por defecto) | `2222` | | `IdentityFile` | Ruta al archivo de clave privada | `~/.ssh/id_ed25519_myserver` | | `ForwardAgent` | Habilita el forwarding de agente SSH | `yes` | | `StrictHostKeyChecking` | ¿Verificar estrictamente la clave del host? (`yes` recomendado) | `no` (para pruebas iniciales) | | `PortForwarding` | Permitir port forwarding | `yes` | | `LocalForward` | Configuración de port forwarding local (`-L`) | `8080 localhost:80` | | `ServerAliveInterval` | Intervalo en segundos para comprobar que el servidor está vivo | `60` | | `ServerAliveCountMax` | Número de intentos antes de desconectar | `3` | --- ## Ejemplo de configuración SSH {#sec-92c9daf3ee29} Añadamos configuraciones para algunos servidores que usamos con frecuencia. ```ini # Primer servidor: web server (alias: webserver) Host webserver HostName 192.168.1.100 User ubuntu Port 2222 IdentityFile ~/.ssh/id_ed25519_webserver # clave exclusiva del web server # Segundo servidor: dev server (alias: devbox) Host devbox HostName dev.example.com User developer IdentityFile ~/.ssh/id_rsa_dev # clave RSA # Forward local port 8000 to remote port 80 LocalForward 8000 localhost:80 # Tercer servidor: todos los EC2 de AWS (alias: aws-*) Host aws-* User ec2-user IdentityFile ~/.ssh/aws_ec2_key.pem # Mantener la conexión viva ServerAliveInterval 60 ServerAliveCountMax 3 # Configuración general para la subred 10.0.0.* (alias: 10.0.0.*) Host 10.0.0.* User admin Port 22 ``` **Explicación:** * `webserver`: Conecta a `192.168.1.100` como `ubuntu` usando el puerto `2222` y la clave `id_ed25519_webserver`. * `devbox`: Conecta a `dev.example.com` como `developer` con la clave `id_rsa_dev` y reenvía el puerto local `8000` al remoto `80`. * `aws-*`: Aplica a cualquier alias que comience con `aws-`. Por ejemplo, `ssh aws-prod` usará `ec2-user` y la clave `aws_ec2_key.pem`. * `10.0.0.*`: Para cualquier IP en la subred `10.0.0.x`, usa `admin` y el puerto `22`. > En la práctica, no suelo usar comodines extensos; prefiero una configuración 1:1 por servidor. Cuando necesito acceder a un mismo servidor con distintas configuraciones, añado un alias adicional y elijo el que necesite, como si seleccionara un plato en un menú. --- ![Al pulsar el botón de conexión SSH, la magia se extiende por la red](/media/whitedec/blog_img/ssh_config_network_magic.webp) ## Cómo usar el archivo de configuración {#sec-e176d1ccdfce} Con la configuración guardada, conectarse se vuelve mucho más sencillo. Veamos cómo. ### 1. Conexión por alias {#sec-b0810f8f4908} Ejecuta el comando SSH usando solo el alias. * **Usando el alias `webserver`:** ```bash ssh webserver Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver': ubuntu@webserver-ip:~ $ ``` > Este comando es equivalente a `ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100`. * **Usando el alias `devbox`:** ```bash ssh devbox Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev': developer@devbox-domain:~ $ ``` > (Si también conectas el puerto local 8000, se redirigirá al puerto 80 de `dev.example.com`). --- ## Ventajas de usar el archivo de configuración {#sec-2c234f7e8725} * **Conveniencia:** Reemplaza comandos largos por alias cortos, reduciendo errores y ahorrando tiempo. * **Productividad:** Accede rápidamente a los servidores que usas con frecuencia. * **Mantenimiento sencillo:** Todos los ajustes de conexión están centralizados; si cambia la IP de un servidor, solo actualizas el archivo. * **Seguridad:** Evita exponer claves o contraseñas en el historial de comandos. --- ## Conclusión {#sec-9c659c3d712e} El archivo de configuración SSH es una herramienta esencial para cualquier desarrollador o administrador que utilice SSH. Con él, tu experiencia de conexión será más fluida y eficiente. Abre `~/.ssh/config`, crea tus alias y disfruta de una gestión de conexiones más ordenada. Si te interesa profundizar, busca en la barra lateral los artículos relacionados con `ssh`. ¡No dudes en dejar tus preguntas en los comentarios!