Introducción
Si se conecta regularmente a varios sistemas remotos a través de SSH a diario, encontrará que recordar todas las direcciones IP remotas, diferentes nombres de usuario, puertos no estándar y varios conmutadores de línea de comando es difícil, si no imposible.
Una opción sería crear un alias bash para cada conexión de servidor remoto. Sin embargo, existe otra solución mejor y más sencilla para este problema. OpenSSH le permite configurar un archivo de configuración por usuario donde puede almacenar diferentes opciones de SSH para cada máquina remota a la que se conecte.
Esta guía cubre los conceptos básicos del archivo de configuración del cliente SSH y explica algunas de las opciones de configuración más comunes.
Prerrequisitos
Supongamos que está ejecutando un sistema Linux o macOS con el cliente OpenSSH instalado.
Ubicación del archivo de configuración SSH
El archivo de configuración del lado del cliente de OpenSSH se llama config
y se almacena en el .ssh
en el directorio de inicio del usuario. El ~/.ssh
se crea automáticamente cuando el usuario ejecuta el comando ssh por primera vez.
Si nunca ha utilizado el ssh
, deberá crear el directorio con este comando:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
De forma predeterminada, es posible que el archivo de configuración SSH no exista, por lo que es posible que deba crearlo con el comando táctil:
touch ~/.ssh/config
Este archivo debe ser legible y escribible solo por el usuario y no debe ser accesible para otros:
chmod 600 ~/.ssh/config
Estructura y esquemas de archivos de configuración SSH
El archivo de configuración SSH tiene la siguiente estructura:
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value
El contenido del archivo de configuración del cliente SSH está organizado en estrofas (secciones). Cada estrofa comienza con la Host
y contiene opciones SSH específicas que se utilizan al establecer una conexión con el servidor SSH remoto.
No se requiere sangría, pero se recomienda ya que facilitará la lectura del archivo.
La Host
puede contener una plantilla o una lista de plantillas separadas por espacios en blanco. Cada patrón puede contener cero o más caracteres no blancos o uno de los siguientes identificadores de patrón:
*
: coincide con cero o más caracteres. Por ejemplo,Host *
coincidirá con todos los hosts, mientras que192.168.0.*
con todos los hosts de la subred192.168.0.0/24
?
- coincide exactamente con un personaje. Modelo de hostHost 10.10.0.?
coincidirá con todos los hosts en el rango10.10.0.[0-9]
.!
- al comienzo de un patrón seHost 10.10.0.*!10.10.0.5
Adaptarse a cualquier host en el10.10.0.0/24
subred excepto10.10.0.5
.
El cliente SSH lee el archivo de configuración por estrofa y si más de un patrón coincide, las primeras opciones coincidentes de estrofa tienen prioridad. Por lo tanto, se deben proporcionar más declaraciones específicas de host y sustituciones más generales al final del archivo al principio del archivo.
Puede encontrar una lista completa de las opciones ssh disponibles escribiendo man ssh_config
:
man ssh_config
O visitando la página del manual ssh_config.
El archivo de configuración SSH también es leído por otros programas como scp
, sftp
y rsync
.
Ejemplo de archivo de configuración SSH básico
Ahora que hemos cubierto el archivo de configuración SSH básico, echemos un vistazo al siguiente ejemplo.
Por lo general, cuando se conecta a un servidor remoto a través de SSH, debe especificar el nombre de usuario, el nombre de host y el puerto remotos. Por ejemplo, para conectarse como un usuario llamado alice
a un host llamado dev.example.it
en el puerto 2322
desde la línea de comando, escriba:
ssh [email protected] -p 2322
Si prefiere conectarse al servidor usando las mismas opciones provistas en el comando anterior simplemente escribiendo ssh dev
, deberá poner las siguientes líneas en su ~/.ssh/config
, luego abra el archivo:
nano ~/.ssh/config
Host dev
HostName dev.example.it
User alice
Port 2322
Ahora si escribe:
ssh dev
el cliente ssh leerá el archivo de configuración y uso de los datos de conexión especificados para el dev
anfitrión.
Ejemplo de un archivo de configuración SSH compartido
Este ejemplo proporciona información más detallada sobre los modelos de host y la prioridad de las opciones.
Tomemos el siguiente archivo de ejemplo:
Host targaryen
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
Host tyrell
HostName 192.168.10.20
Host martell
HostName 192.168.10.50
Host *ell
user oberyn
Host *!martell
LogLevel INFO
Host *
User root
Compression yes
Si escribe ssh targaryen
el cliente ssh leerá el archivo y aplicará las opciones de la primera coincidencia, que es Host targaryen
. Luego revisará las siguientes habitaciones una por una para encontrar el modelo correspondiente. El siguiente partido es Host *!martell
que significa que todos los anfitriones excepto martell
aplicarán la opción de conexión desde esta sala. Finalmente, la última definición de Host *
también es posible, pero el cliente ssh solo tomará la opción de Compression
User
ya está definida en la Host targaryen
. La lista completa de opciones utilizadas en este caso es la siguiente:
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
LogLevel INFO
Compression yes
Cuando se ejecuta ssh tyrell
los modelos de host correspondientes son: Host tyrell
, Host *ell
, Host *!martell
y Host *
. Las opciones utilizadas en este caso son:
HostName 192.168.10.20
User oberyn
LogLevel INFO
Compression yes
Si está ejecutando ssh martell
las plantillas de host correspondientes son: Host martell
, Host *ell
y Host *
. Las opciones utilizadas en este caso son:
HostName 192.168.10.50
User oberyn
Compression yes
- Todas las demás conexiones utilizarán las opciones especificadas en las secciones
Host *!martell
yHost *
Sobrescriba o PTION el archivo de configuración SSH
El cliente ssh recibe su configuración en el siguiente orden de precedencia:
- Opciones especificadas en la línea de comando
- Opciones definidas en
~/.ssh/config
- Opciones definidas en
/etc/ssh/ssh_config
Si desea anular una sola opción, puede especificarla en la línea de comando. Por ejemplo, si tiene la siguiente definición:
Host dev
HostName dev.example.it
User john
Port 2322
y desea utilizar todas las demás opciones, pero conectarse como root
lugar de alice
solo especifique el usuario desde la línea de comando:
ssh -o "User=root" dev
La -F
( configfile
) le permite especificar un archivo de configuración de usuario alternativo.
Si desea que su cliente ssh ignore todas las opciones especificadas en su archivo de configuración ssh, puede usar:
ssh -F /dev/null [email protected]
Conclusión
Ha aprendido a configurar su archivo de configuración ssh de usuario. También puede configurar la autenticación basada en claves SSH y conectarse a servidores Linux sin ingresar una contraseña.
De forma predeterminada, SSH escucha en el puerto 22. Cambiar el puerto SSH predeterminado agrega una capa adicional de seguridad al servidor al reducir el riesgo de ataques automatizados.