¡Hey! ¡Hola a todos! Desde hace tiempo estaba por escribirles algo pero me ha costado mucho salir de este letargo post-fin-de-año pero bueno, acá estamos, de vuelta en la pelea! Hoy les mostraré cómo podemos conectarnos vía SSH sin contraseña, cosa que nos puede ser muy útil sobre todo cuando tenemos un ambiente de Centro de Datos con tareas programadas de respaldo de información y cosas por el estilo.

ssh_linux_hispano

1. Generamos las llaves pública y privada en el host cliente

Primero nos logueamos en el cliente con el usuario que estaremos usando para conectarnos de forma automática (en este caso lo haré con root) y generamos un par de llaves pública y privada para ese usuario. Para ello ejecutamos el siguiente comando:

ssh-keygen -b 8192 -t rsa -N ""

2. Copiamos la llave pública en el host remoto

Esto lo podemos hacer a mano o para una mayor comodidad utilizamos el siguiente comando:

ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@host-remoto

ssh-copy-id nos agrega la llave pública en el host remoto, especificamente en el fichero ~/.ssh/authorized_keys, contenido en el home del usuario que estamos utilizando.

3. Nos logueamos sin contraseña en el host remoto

En este punto ya podemos conectarnos al host remoto sin contraseña. Esto lo podemos comprobar con un simple comando:

ssh usuario@host-remoto

4. Hacemos algunos ajustes si son necesarios

Dependiendo de las necesidades podemos realizar algunos ajustes en el host cliente para hacernos la vida menos dura. Estos ajustes los especificaremos en el archivo ~/.ssh/config (si no existe lo creamos con permisos 640 y por supuesto, el propietario debe ser el dueño del home donde se crea). A continuación les presento un ejemplo de fichero config con algunos ajustes.

# Conectarnos a un host especificando usuario y llave privada.
host 192.168.50.2
    user root
    identityfile /root/.ssh/backup_key_rsa
# Conectarnos un host diferente con una llave diferente.
host 192.168.12.71
    user root
    identityfile /root/.ssh/other_key_rsa

# Conectarnos a todos los hosts de una subred empleando el mismo usuario y 
# la misma llave privada.
host 192.168.120.*
    user root
    identityfile /root/.ssh/lazy_key_rsa
    # Opciones de utilidad.
    StrictHostKeyChecking no
    BatchMode yes
    ConnectionAttempts 1
    UserKnownHostsFile=/dev/null

Dentro del fichero config, podemos utilizar todas las opciones que nos brinda openssh. Para más detalles, consulte en el manual de openssh todas las opciones disponibles (man ssh_config también funciona).

En el host remoto podemos hacer algunos ajustes de seguridad en el fichero ~/.ssh/authorized_keys, restringiendo el acceso mediante la llave que copiamos en el paso 2.

from="192.168.120.2" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCjBv61pyfwurEpGS$

En este caso estamos limitando que el acceso utilizando esa llave será permitido solo desde el ip 192.168.120.2. Una pequeña pero útil configuración que nos brindará un poco más de seguridad. De momento, esto es todo por hoy. Espero que les sea de utilidad ¡Hasta la próxima!