Si se conecta regularmente a múltiples sistemas remotos a través de SSH, encontrará que recordar todas las direcciones IP remotas, diferentes nombres de usuario, puertos no estándar y varias opciones de línea de comandos es difícil, si no imposible.
Una opción sería crear un alias de bash para cada conexión de servidor remoto. Sin embargo, hay otra solución mucho 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.
Este artículo 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.
Requisitos previos #
Suponemos que está utilizando un sistema Linux o macOS con un 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
directorio bajo el directorio de inicio del usuario.
El ~/.ssh
El directorio se crea automáticamente cuando el usuario ejecuta ssh
mando por primera vez. Si el directorio no existe en su sistema, créelo usando el siguiente comando:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
De forma predeterminada, es posible que el archivo de configuración de SSH no exista, por lo que es posible que deba crearlo usando el touch
comando:
touch ~/.ssh/config
Este archivo debe ser legible y escribible solo por el usuario y otros no pueden acceder a él:
chmod 600 ~/.ssh/config
Estructura y patrones del archivo 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 el Host
directiva 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 hace que el archivo sea más fácil de leer.
El Host
La directiva puede contener un patrón o una lista de patrones separados por espacios en blanco. Cada patrón puede contener cero o más caracteres que no sean espacios en blanco o uno de los siguientes especificadores de patrón:
*
- Coincide con cero o más caracteres. Por ejemplo,Host *
coincide con todos los hosts, mientras que192.168.0.*
coincide con hosts en el192.168.0.0/24
subred.?
- Coincide exactamente con un carácter. El patrón,Host 10.10.0.?
coincide con todos los hosts en10.10.0.[0-9]
rango.!
- Cuando se usa al comienzo de un patrón, niega la coincidencia. Por ejemplo,Host 10.10.0.* !10.10.0.5
coincide con cualquier host en el10.10.0.0/24
subred excepto10.10.0.5
.
El cliente SSH lee el archivo de configuración sección por sección y, si coinciden más de un patrón, las opciones de la primera sección coincidente tienen prioridad. Por lo tanto, se deben proporcionar más declaraciones específicas del host al principio del archivo y anulaciones más generales al final del archivo.
Puede encontrar una lista completa de opciones ssh disponibles escribiendo man ssh_config
en su terminal o visitando la página man de 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 #
Ahora que hemos cubierto los conceptos básicos del archivo de configuración de SSH, veamos el siguiente ejemplo.
Por lo general, cuando se conecta a un servidor remoto a través de SSH, debe especificar el nombre de usuario remoto, el nombre de host y el puerto. Por ejemplo, para iniciar sesión como un usuario llamado john
a un host llamado dev.example.com
en el puerto 2322
desde la línea de comando, escribiría:
ssh [email protected] -p 2322
Para conectarse al servidor utilizando las mismas opciones que se proporcionan en el comando anterior, simplemente escriba ssh dev
, coloque las siguientes líneas en su "~/.ssh/config
archivo:
Host dev
HostName dev.example.com
User john
Port 2322
Ahora cuando escribes ssh dev
, el cliente ssh leerá el archivo de configuración y usará los detalles de conexión que se especifican para el dev
anfitrión:
ssh dev
Ejemplo de archivo de configuración SSH compartido #
Este ejemplo brinda información más detallada sobre los patrones de host y la precedencia de 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
-
Cuando escribes
ssh targaryen
, el cliente ssh lee el archivo y aplica las opciones de la primera coincidencia, que esHost targaryen
. Luego verifica las siguientes estrofas una por una para encontrar un patrón coincidente. El siguiente que coincide esHost * !martell
(es decir, todos los hosts exceptomartell
), y aplicará la opción de conexión de esta estrofa. La última definiciónHost *
también coincide, pero el cliente ssh tomará solo laCompression
opción porque elUser
la opción ya está definida en elHost targaryen
estrofa.La lista completa de opciones utilizadas cuando escribes
ssh targaryen
es el siguiente:HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
-
Al ejecutar
ssh tyrell
los patrones de host coincidentes son:Host tyrell
,Host *ell
,Host * !martell
yHost *
. Las opciones utilizadas en este caso son:HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
-
Si ejecuta
ssh martell
, los patrones de host coincidentes son:Host martell
,Host *ell
yHost *
. Las opciones utilizadas en este caso son:HostName 192.168.10.50 User oberyn Compression yes
-
Para todas las demás conexiones, el cliente ssh utilizará las opciones especificadas en el
Host * !martell
yHost *
secciones.
Anular opción de archivo de configuración SSH #
El cliente ssh lee su configuración en el siguiente orden de precedencia:
- Opciones especificadas desde la línea de comando.
- Opciones definidas en el
~/.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.com
User john
Port 2322
y quiere usar todas las demás opciones pero conectarse como usuario root
en lugar de john
simplemente especifique el usuario en la línea de comando:
ssh -o "User=root" dev
El -F
(configfile
) le permite especificar un archivo de configuración alternativo por usuario.
Para decirle al ssh
cliente para ignorar todas las opciones especificadas en el archivo de configuración ssh, use:
ssh -F /dev/null [email protected]
Conclusión #
Le mostramos cómo configurar su archivo de configuración ssh de usuario. También puede configurar una autenticación basada en clave SSH y conectarse a sus 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 a su servidor al reducir el riesgo de ataques automatizados.
Si tiene alguna pregunta, deje un comentario a continuación.