En la publicación anterior, revisamos cómo usar el comando ssh y sus opciones útiles. Sin embargo, introducir manualmente direcciones IP complicadas, nombres de usuario y números de puerto cada vez es realmente tedioso. Aquí es donde el archivo de configuración SSH puede resolver todos estos inconvenientes de una sola vez. Es como un marcador, que te permite guardar la información de acceso de los servidores que utilizas frecuentemente y acceder a ellos fácilmente con alias.

Ilustración de un desarrollador usando el archivo de configuración SSH como un marcador


¿Qué es el archivo de configuración SSH?

El archivo de configuración SSH es un archivo de configuración que personaliza cómo funciona el cliente SSH. Si guardas la información de acceso (nombre de usuario, puerto, archivo de clave, etc.) para un host específico en este archivo, podrás acceder más tarde con solo usar un alias corto.

  • Ubicación: Generalmente, se encuentra en la carpeta .ssh del directorio principal del usuario, bajo el nombre config.
    • Ejemplo: ~/.ssh/config
  • Crear archivo: Si no tienes el archivo ~/.ssh/config, puedes crearlo tú mismo.

    bash touch ~/.ssh/config chmod 600 ~/.ssh/config # Asigna permisos de lectura/escritura solo al propietario por razones de seguridad


Reglas para escribir el archivo de configuración

El archivo de configuración es un archivo de texto simple, y cada configuración para un host comienza con la palabra clave Host y se escribe en forma de bloque.

Estructura básica

Host [alias]
    [opción1] [valor1]
    [opción2] [valor2]
    ...
  • Host [alias]: Inicia este bloque y define el alias que utilizarás. Este alias se usará en el comando SSH. También puedes introducir directamente la dirección real del host (IP o dominio). Se pueden utilizar caracteres comodín (*, ?).

  • Indentación: Las opciones bajo Host deben estar indentadas. Puedes usar espacios o tabulaciones, pero es recomendable mantener la coherencia.

  • Opciones: Bajo Host, enumera varias opciones SSH que se aplicarán al conectarte con ese alias. Estas opciones son las mismas que usabas previamente en la forma ssh -opción.

Opciones comúnmente usadas

Opción Descripción Ejemplo de valor
HostName Dirección IP o nombre de dominio del servidor al que te conectarás 192.168.1.100 o example.com
User Nombre de la cuenta de usuario para acceder al servidor remoto ubuntu, ec2-user, root
Port Número de puerto SSH del servidor remoto (predeterminado 22) 2222
IdentityFile Ruta del archivo de clave privada que se usará al conectar ~/.ssh/id_ed25519_myserver
ForwardAgent Habilitar el reenvío del agente SSH (Agent Forwarding, cuando se usa ssh-agent) yes
StrictHostKeyChecking Si se debe hacer una verificación estricta de la clave del host (yes recomendado) no (usado temporalmente durante pruebas iniciales)
PortForwarding Si se permite el reenvío de puertos yes
LocalForward Configuración del reenvío de puertos locales (equivalente a la opción -L) 8080 localhost:80
ServerAliveInterval Intervalo para comprobar si el servidor sigue activo (en segundos) 60 (para evitar desconexiones)
ServerAliveCountMax Número de intentos antes de desconectar si falla la verificación del servidor 3

Ejemplo de escritura de archivo de configuración SSH

Agreguemos algunas configuraciones para los servidores a los que accedemos frecuentemente al archivo ~/.ssh/config.

# Primer servidor: servidor web (alias: webserver)
Host webserver
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_webserver # Usar clave dedicada para el servidor web

# Segundo servidor: servidor de desarrollo (alias: devbox)
Host devbox
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_rsa_dev # Usar clave RSA
    # Reenviar el puerto 8000 local al puerto 80 remoto al acceder a este servidor
    LocalForward 8000 localhost:80 

# Tercer servidor: todos los servidores de AWS EC2 (alias: aws-*)
Host aws-*
    User ec2-user
    IdentityFile ~/.ssh/aws_ec2_key.pem
    # Enviar señales periódicamente para evitar desconexiones
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Configuración general para un rango de IP específico (alias: 10.0.0.*)
Host 10.0.0.*
    User admin
    Port 22

Descripción:

  • webserver: Puedes conectarte al servidor 192.168.1.100 como usuario ubuntu, usando el puerto 2222 y la clave id_ed25519_webserver.

  • devbox: Acceso al servidor dev.example.com como usuario developer, utilizando la clave id_rsa_dev, y reenviando el puerto local 8000 al puerto remoto 80.

  • aws-*: Configuración aplicable a todos los alias que comienzan con aws-. Por ejemplo, al conectarte a aws-prod o aws-dev, se aplicarán automáticamente las configuraciones de User y IdentityFile. HostName será prod al conectarse a aws-prod (usar más tarde con el comando ssh aws-prod).

  • 10.0.0.*: Al conectarte a una dirección IP del tipo 10.0.0.x, automáticamente se aplicará el usuario admin y el puerto predeterminado 22.


Una imagen mágica que se expande a través de la red al presionar el botón de conexión SSH

Cómo usar el archivo de configuración

Ahora que has guardado configuraciones en el archivo de configuración, acceder es mucho más simple. Probemos con los ejemplos anteriores.

1. Acceso utilizando un alias

Ejecútalo usando solo el alias en el comando de acceso SSH.

  • Uso del alias webserver:
    ssh webserver
    Ingresa la frase de paso para la clave '/home/youruser/.ssh/id_ed25519_webserver':
    ubuntu@webserver-ip:~ $
Este comando actúa internamente como `ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100`.
  • Uso del alias devbox:
    ssh devbox
    Ingresa la frase de paso para la clave '/home/youruser/.ssh/id_rsa_dev':
    developer@devbox-domain:~ $
(Conectándose al mismo tiempo al puerto local 8000 al puerto 80 de dev.example.com)
  • Uso del alias aws-prod (alias con comodín):
    ssh aws-prod
    Ingresa la frase de paso para la clave '/home/youruser/.ssh/aws_ec2_key.pem':
    ec2-user@aws-prod-hostname:~ $

Nota: En el caso de un alias comodín como aws-prod, donde no se especifica un nombre de host por separado, es posible que debas especificar la opción HostName explícitamente o proporcionar el nombre del host en la línea de comandos. En el ejemplo de aws-*, si no se especifica HostName, el cliente SSH intentará interpretar prod como nombre de host al ejecutar ssh aws-prod. Para ser más claro, es común mapear el alias Host prod-server a HostName prod.example.com.


Ventajas de usar el archivo de configuración

  • Conveniencia: Puedes reemplazar comandos SSH largos y complejos por un alias corto, lo que reduce errores de entrada y ahorra tiempo.
  • Productividad: Puedes moverte rápidamente entre servidores a los que accedes a menudo, aumentando la eficiencia del trabajo.
  • Facilidad de gestión: Puedes gestionar todas las configuraciones relacionadas con el acceso en un solo lugar, facilitando el mantenimiento. Por ejemplo, si cambia la dirección IP del servidor, solo es necesario editar el archivo de configuración.
  • Seguridad: No es necesario dejar información crítica (p. ej. ruta del archivo de clave) en el historial de comandos.

Para concluir

El archivo de configuración SSH es una herramienta esencial para todos los desarrolladores y administradores de sistemas que utilizan SSH. Con este archivo, puedes hacer que tu experiencia de acceso SSH sea significativamente más conveniente y eficiente. ¡Abre el archivo ~/.ssh/config y crea tus propios alias!

¡No olvides leer otras publicaciones relacionadas con SSH! Puedes buscar 'ssh' en el cuadro de búsqueda de la derecha para ver varios artículos sobre SSH.

Si tienes alguna pregunta, ¡no dudes en dejarla en los comentarios!