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 fuera un favorito. Yo mismo, cuando era un "total novato" y desconocía la existencia del archivo de configuración, solía registrar los comandos que usaba con frecuencia en `.bashrc` como alias. Cuando aprendí a crear 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 la carpeta `.ssh` dentro del directorio home del usuario, llamado `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 ``` Host [alias] [opción1] [valor1] [opción2] [valor2] ... ``` * **`Host [alias]`**: Indica el inicio del bloque y define el alias que usarás. En lugar del alias, también puedes colocar la dirección real (IP o dominio) y usar comodines (`*`, `?`). * **Indentación:** Los parámetros bajo `Host` deben estar indentados. Puedes usar espacios o tabulaciones, pero mantén la consistencia. * **Opciones:** Bajo `Host` 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 del agente SSH | `yes` | | `StrictHostKeyChecking` | ¿Verificar estrictamente la clave del host? (`yes` recomendado) | `no` (para pruebas iniciales) | | `PortForwarding` | Permitir port forwarding | `yes` | | `LocalForward` | Configura 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á automáticamente el usuario y la clave definidos. * `10.0.0.*`: Para cualquier IP en la subred `10.0.0.x`, se usa el usuario `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ú. --- ![Botón de conexión SSH y la magia de 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 un ejemplo. ### 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 del servidor `dev.example.com`). --- ## Ventajas de usar el archivo de configuración {#sec-2c234f7e8725} * **Conveniencia:** Reemplaza comandos largos y complejos por un alias corto, 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 que la ruta de la clave aparezca 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, puedes hacer que tus conexiones sean más rápidas, seguras y fáciles de gestionar. Abre `~/.ssh/config`, crea tus alias y disfruta de una experiencia SSH más fluida. ¡Explora también otros posts relacionados con SSH! Busca "ssh" en la barra lateral derecha para encontrar más artículos. Si tienes dudas, deja un comentario y con gusto te ayudaré.