Cómo configurar conexiones SSH personalizadas para simplificar el acceso remoto


SSH ( cliente SSH ) es un programa para acceder de forma remota a una máquina, permite a un usuario ejecutar comandos en un host remoto. Es uno de los métodos más recomendados para iniciar sesión en un host remoto, ya que está diseñado para proporcionar comunicaciones cifradas seguras entre dos hosts no confiables a través de una red insegura.

SSH utiliza un archivo de configuración (personalizado) tanto para todo el sistema como específico del usuario. En este tutorial, explicaremos cómo crear un archivo de configuración ssh personalizado y usar ciertas opciones para conectarse a hosts remotos.

  1. You must have installed OpenSSH client on your Linux desktop.
  2. Understand the common options used for remote connections via ssh.

A continuación se encuentran las ubicaciones de los archivos de configuración del cliente ssh:

  1. /etc/ssh/ssh_config – this is the default, system-wide configuration file. It contains settings that apply to all users of ssh client machine.
  2. ~/.ssh/config or $HOME/.ssh/config – is the user-specific/custom configuration file. It has configurations that apply to a specific user. It therefore overrides default settings in the system-wide config file. This is the file we will create and use.

De forma predeterminada, los usuarios se autentican en ssh mediante contraseñas, sin embargo, puede configurar ssh login sin contraseña usando ssh keygen en 5 simples pasos.

$ mkdir -p ~/.ssh
$ chmod 0700 ~/.ssh   

El comando chmod anterior implica que solo el usuario puede tener permisos de lectura, escritura y ejecución en el directorio como lo requiere la configuración de ssh.

Cómo crear un archivo de configuración SSH específico del usuario

Este archivo generalmente no se crea de forma predeterminada, por lo que debe crearlo con los permisos de lectura/escritura solo para el usuario.

$ touch ~/.ssh/config
$ chmod 0700 ~/.ssh/config

El archivo anterior contiene secciones definidas por las especificaciones de los hosts, y una sección solo se aplica a los hosts que coinciden con uno de los patrones establecidos en la especificación.

El formato convencional de ~/.ssh/config es el siguiente, y todas las líneas vacías, así como las líneas que comienzan con ‘#’ , se consideran como comentarios:

Host    host1
	ssh_option1=value1
	ssh_option2=value1 value2
	ssh_option3=value1 

Host    host2
	ssh_option1=value1
	ssh_option2=value1 value2

Host  *
	ssh_option1=value1
	ssh_option2=value1 value2

Del formato anterior:

  1. Host host1 – is a header definition for host1, this is where a host specification starts and it ends with the next header definition, Host host2 making a section.
  2. host1, host2 are simply host aliases to use on the command line, they are not the actual hostnames of the remote hosts.
  3. The configuration options such as ssh_option1=value1, ssh_option2=value1 value2 apply to a matched host and should be indented for well organized formatting.
  4. For an option such as ssh_option2=value1 value2, the value value1 is considered first, then value2.
  5. The header definition Host * (where * is a pattern – wildcard that matches zero or more characters) will match zero or more hosts.

Aún considerando el formato anterior, así es como ssh lee el archivo de configuración. Si ejecuta un comando ssh para acceder de forma remota a host1 de esta manera:

$ ssh host1

El comando ssh anterior hará lo siguiente:

  1. match the host alias host1 in the config file and applies the options set under the definition header, Host host1.
  2. then moves to the next host section, Host host2 and finds that the name provided on the command line doesn’t match, so no options are used from here.
  3. It proceeds to the last section, Host *, which matches all hosts. Here, it applies all the options in this section to the host connection. But it can not override any values of options that where already used in the previous section(s).
  4. The same applies to host2.

Cómo usar el archivo de configuración SSH específico del usuario

Una vez que haya entendido cómo funciona el archivo de configuración del cliente ssh, puede crearlo de la siguiente manera. Recuerde usar opciones y valores (alias de host, números de puerto, nombres de usuario, etc.) aplicables a su entorno de servidor.

Abra el archivo de configuración con su editor favorito:

$ vi ~/.ssh/config

Y definir las secciones necesarias:

Host fedora25
        HostName 192.168.56.15
        Port 22
        ForwardX11 no

Host centos7
        HostName 192.168.56.10
        Port 22
        ForwardX11 no

Host ubuntu
        HostName 192.168.56.5
        Port 2222
        ForwardX11 yes

Host *
        User tecmint
        IdentityFile ~/.ssh/id_rsa
        Protocol 2
        Compression yes
        ServerAliveInterval 60
        ServerAliveCountMax 20
        LogLevel INFO

Una explicación detallada de las opciones de configuración ssh anteriores.

  1. HostName – defines the real host name to log into, alternatively, you can use a numeric IP addresses, it is also permitted (both on the command line and in HostName specifications).
  2. User – specifies the user to log in as.
  3. Port – sets the port number to connect on the remote host, the default is 22. Use the port number configured in the remote host’s sshd config file.
  4. Protocol – this option defines the protocol versions ssh should support in order of preference. The usual values are ‘1’ and ‘2’, multiple versions must be comma-separated.
  5. IdentityFile – specifies a file from which the user’s DSA, Ed25519, RSA or ECDSA authentication identity is read.
  6. ForwardX11 – defines whether X11 connections will be automatically redirected over the secure channel and DISPLAY set. It has two possible values “yes” or “no”.
  7. Compression – it’s used to set compression during the remote connection with the “yes” value. The default is “no”.
  8. ServerAliveInterval – sets a timeout interval in seconds after which if no response (or data) has been received from the server, ssh will send a message through the encrypted channel to request a response from the server. The default value is 0, meaning no messages will be sent to the server, or 300 if the BatchMode option has been defined.
  9. ServerAliveCountMax – sets the number of server alive messages which may be sent without ssh receiving any response from the server.
  10. LogLevel – defines the verbosity level that is used when logging messages from ssh. The allowed values includes: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3. And the default is INFO.

La forma estándar de conectarse a cualquier host remoto de Linux (CentOS 7, en mi caso), definida en la sección dos del archivo de configuración anterior, normalmente escribiríamos el siguiente comando:

$ ssh -i ~/.ssh/id_rsa -p 22 [email protected]

Sin embargo, con el uso del archivo de configuración del cliente ssh, simplemente podemos escribir el siguiente comando:

$ ssh centos7 

Puede encontrar más opciones y ejemplos de uso en la página de comando man ssh client config:

$man ssh_config

Eso es todo por ahora, en esta guía, le explicamos cómo usar un archivo de configuración de cliente ssh específico para el usuario en Linux. Utilice el formulario de comentarios a continuación para escribirnos sobre este artículo.