Configura conexiones SSH sin password

LINUX
ssh

Podemos crear claves privadas y públicas en los hosts remotos de confianza para no tener que insertar nuestra clave de administrador cada vez que hagamos una operación por SSH. Esto puede ser tanto en entornos Debian o RedHat. En nuestro caso lo aplicaremos a entornos Debian.

Partiendo de que tenemos permisos de administrador, tenemos la siguiente situación:
SERVER#1 –> Desea conectarse a HOST#2, sin tener que escribir password cada vez que se intente conectar a esta otra PC.
HOST#2 –> Tiene instalado el servidor SSH. Este HOST#2 es al que SERVER#1 se conectará, y lo hará sin introducir password.

Generación de clave privada y pública

En SERVER#1 generamos las claves públicas y privadas como root con ssh-keygen:

Con clave rsa
$ ssh-keygen -t rsa -b 1024 -C “dominio@email.com”→ Creará claves rsa de 1024 bits

Con clave ed25519
$ ssh-keygen -t ed25519 -C “dominio@email.com”→ Creará claves con el algoritmo ed25519

Nos pedirá una “passphrase”. En producción utilicemos una passphrase larga para que nos la pida cada vez, por seguridad. Como vemos nos generará las claves en el directorio /root/.ssh

-rw------- 1 administrador administrador 464 sep 25 08:13 id_ed25519

-rw-r--r-- 1 administrador administrador 104 sep 25 08:13 id_ed25519.pub

La clave pública “id_ed25519.pub” podríamos utilizarla en AWS, DigitalOcean, Google Cloud, GitLab o GitHub y muchos otros.

Configurar los clientes para que autentiquen con nuestra clave generada

Partimos de que en las máquinas clientes ya tenemos instalado el servicio «openssh», sino lo instalamos:

$ sudo apt install openssh-server openssh-client

El siguiente paso es copiar la clave pública de nuestro SERVIDOR#1 a nuestro cliente:

$ ssh-copy-id -i /root/.ssh/id_ed25519.pub cliente@<ip-cliente>

Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'linex@172.18.220.45'"
and check to make sure that only the key(s) you wanted were added.
Comprobamos en el cliente que ha copiado correctamente la clave pública:

Podemos comprobar dentro del directorio /home/cliente/.ssh/authorized_keys que se ha copiado efectivamente la clave y que coincide con la de nuestro SERVER#1

$ cat /home/cliente/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM/ox24Es73CBKzea7f4pIWphZD/+G2aVcWIVRquzAdR root@servidor1

Si deseamos que solo se pueda hacer login mediante esta clave generada, cambiamos para que solo se pueda conectar por ssh mediante la clave pública, modificando la línea del fichero /etc/ssh/sshd_config:

PasswordAuthentication no

Y comprobamos que hacemos login con nuestro usuario pero sin pedir la clave. Si tenemos un passphrase sí que nos lo pedirá, a no ser que añadamos nuestra clave privada al ssh-agent, para que él se encargue de esto en el SERVER#1