Hace ya casi un año que publiqué un artículo sobre Sincronización sin contraseña, en el que hablaba sobre como hacer una conexión ssh sin utilizar contraseña y por ende, como sincronizar vía rsync con un servidor remoto. En este artículo quiero entrar mas en detalle en la configuración de ssh.
Hoy en día que se ha puesto tan de moda los dispositivos como la Raspberry Pi o Arduino, mucho usuarios, hemos pasado a tener otro tipo de relaciones en la red, y no me mal interpretes. Me refiero a que hemos pasado a trabajar directamente con ellos vía terminal y no tanto con interfaz gráfico.
Desde mi punto de vista, o por lo menos a mi me está pasando así, actualmente hago mucho mas uso de la terminal. En casa tenemos un NAS, de Synology, que tiene un muy buen interfaz gráfico vía navegador, pero casi siempre me decanto por utilizar la terminal para trabajar con él, me resulta más cómodo. Y evidentemente todas estas conexiones en la terminal las hago vía ssh.
Cuando tus conexiones vías ssh son ocasionales, no te importa escribir todos los parámetros de la conexión cada vez que quieres conectarte. Sin embargo, puede ser que tengas que conectarte a un equipo vía ssh con mucha frecuencia. También puede suceder que tengas varios dispositivos, y no quieras tener que recordar los parámetros de conexión a cada uno de ellos. La solución la encontrarás en la configuración de ssh. Y no me refiero a la configuración del servidor, si no a tu configuración, a la configuración de cliente.
Configuración de ssh
Acceso vía ssh sin contraseña
El paso fundamental para simplificar nuestras conexiones vía ssh, es el uso de clave. Para ello deberás general una clase según comentaba en el artículo mencionado anteriormente, Sincronización sin contraseña.
Por supuesto realizar la conexión con clave en lugar de contraseña, además de mas cómodo es mucho mas seguro. No te tienes que acordar de la contraseña, ni la tienes que guardar en ningún sitio, ni utilizarla para acceder.
En este artículo, además de indicarte como crear la clave, también te explico como debes instalarla en el otro equipo u otros equipos con los que te conectarás frecuentemente.
Ahora bien, es necesario que en el equipo al que te vas a conectar tengas los permisos bien configurados. Por ejemplo, si te vas a conectar en al equipo_b
como usuario_b
, ejecuta las siguientes órdenes,
chmod 750 /home/usuario_b
chmod 700 /home/usuario_b/.ssh
chmod 600 /home/usuario_b/.ssh/authorized_keys
De otra forma no podrás conectarte con clave, y cuando lo intentes te seguirá pidiendo la contraseña.
El archivo de configuración de ssh
Pero no solo podemos simplificar nuestras conexiones a otros equipos configurando una clave para acceder sin contraseña. También podemos establecer una configuración de ssh, que nos simplificará sensiblemente nuestras conexiones. Insisto, no me refiero a la configuración del servidor, si no a tu configuración, a la configuración de cliente.
Para establecer la configuración de ssh, debemos acceder al directorio ~/.ssh
. Allí entre otros archivos como puede ser id_rsa
e id_rsa.pub
, puede ser que encuentres config
. Si no lo encuentras no te preocupes que lo vamos a crear en un momento.
Vamos con una configuración básica, por ejemplo, si quieres conectarte a tu Raspberry. A esta le vamos a llamar rpi
, y el contenido de ~/.ssh/config
será tal y como sigue,
Host rpi Hostname 192.168.1.48 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes User pi Port 22
A continuación te detallo cada uno de los parámetros,
Host
define a quien aplica la sección definida a continuación. La sección termina con una nueva definición deHost
o con el final del archivo.Hostname
es la dirección de la otra máquina. Esto puede ser una dirección IP como la que he puesto en el ejemplo o una url comobazaar.launchpad.net
.IdentityFile
es el archivo que contiene la clave privada. La clave pública es la que se encuentra en la otra máquina. Puedes tener tantas claves privadas como necesites, y cada una de estas claves privadas se encontrará en un archivo diferente.IdentitiesOnly
especifica que en la conexión solo debe utilizar el fichero de clave indicado en el archivo de configuración de ssh. Es decir, solo tiene que tener en consideración el archivo indicado enIdentityFile
.User
es el usuario con el cual nos registraremos en la otra máquina. Y que recordemos, según lo mencionado en el apartado anterior, su directorio y archivos deben tener los permisos correctosPort
es el puerto al que nos conectamos, que por defecto es el 22, pero que en algunas máquinas puede ser distinto.
Así, la cosa se simplifica sensiblemente, y en lugar de ejecutar la siguiente orden para conectarnos,
ssh -i ~/.ssh/id_rsa -p 22 pi@192.168.1.48
A conectarnos así,
ssh rpi
Además de los parámetros definidos anteriormente, existen muchos otros parámetros, como pueden ser los siguientes,
ProxyCommand
. Especifica el comando utilizado para conectarse con el servidor.LocalForward
. Indica que un puerto TCP de la máquina local será redirigido a través de un canal seguro a un puerto de una máquina remota.Protocol
. Indica la versión de protocolo que debe de soportar.ServerAliveInterval
. Establece un intervalo en segundos después del cual sino no se ha recibido ningún dato del servidor se enviará un mensaje a través de un canal cirado para requerir una respuesta del servidor.ServerAliveCountMax
. Establece el número de mensajes que pueden ser enviados del tipo anterior, sin que haya respuesta por parte del servidor.
Aún así esto son unos pocos parámetros, en /etc/ssh/ssh_config
, puedes encontrar todos los parámetros que se pueden definir. Y una definición completa de los mismos la puedes encontrar en el siguiente enlace de parámetros de ssh.
Un paso mas en la configuración
Además de definir varias configuraciones, puedes definir una configuración de ssh general a todas ellas. Por ejemplo, vamos a suponer que tuvieras dos Raspberry Pi, y que en ambas utilizas la misma clave. Tu archivo de configuración podría ser,
Host rpi1 Hostname 192.168.1.48 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes User pi Port 22 Host rpi2 Hostname 192.168.1.49 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes User pi Port 22
ó por simplificar, podría ser tal y como sigue,
Host rpi1 Hostname 192.168.1.48 Host rpi2 Hostname 192.168.1.49 Host * IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes User pi Port 22
Conclusiones
Como puedes ver las posibilidades que tienes a la hora de crear una configuración de ssh óptima para tu equipo son muy variadas. Pero sobre todo, todo esto te puede simplicar considerablemente el trabajo. No te tendrás que preocupar de direcciones IP, contraseñas, y configuraciones personalizadas. Es una manera muy práctica de simplificar y asegurar tus conexiones vía ssh.
Más información,