Instalación y configuración Ansible entornos Debian (parte II): generación claves SSH nodos remotos

LINUXSISTEMAS OPERATIVOS
Ansible

Generación claves SSH nodos remotos

Debemos crear las claves ssh para poder gestionar los nodos remotos que vamos a manejar.

Creación de clave privada y pública en el nodo de control

Como recomendación es usar algoritmos tipo “ed”, en vez de “rsa” ya que las claves suelen ser más pequeñas y más eficientes a la hora de conectarnos a muchas máquinas a la vez, lo que nos dará más velocidad a la ver que buena seguridad.

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.

administrador@server34:~/.ssh$ ssh-keygen -t ed25519

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/administrador/.ssh/id_ed25519): (dejaremos por defecto)
Enter passphrase (empty for no passphrase): (al menos 50 caracteres)
Enter same passphrase again:
Your identification has been saved in /home/administrador/.ssh/id_ed25519
Your public key has been saved in /home/administrador/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:kVzc3soKivIAs/74TDvBQVOLAlNBqWuaGB+32oqxnJA administrador@server34
The key's randomart image is:
+--[ED25519 256]--+
|oo+o..   ...     |
|...o. .. o. .    |
| o....  +  . .   |
|. ..     .  . .  |
|o.. .   S  . .   |
|o*.o.   .   o    |
|E+.+.o . . .     |
|B+B++ .   .      |
|o==X+            |
+----[SHA256]-----+

Como vemos nos generará las claves en el directorio ./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.

Para no tener que estar insertando continuamente la passphrase, añadiremos nuestra clave privada al ssh-agent, para que él se encargue de esto.

administrador@server34:~/.ssh$ eval “$(ssh-agent -s)”
Agent pid 42779

Cargamos la clave ssh privada:

administrador@server34:~/.ssh$ ssh-add /home/administrador/.ssh/id_ed25519
Enter passphrase for /home/administrador/.ssh/id_ed25519:
Identity added: /home/administrador/.ssh/id_ed25519 (administrador@server34)

Configurar los clientes para que autentiquen con nuestra clave generada

Entraremos en las máquinas que vamos a configurar y para no usar root, deberíamos darle permisos sudo al usuario que usaremos como administrador. En nuestro ejemplo usaremos un usuario que tenemos en producción llamado “linex”.

administrador@server34:~$ ssh root@172.18.220.45
root@sD13-pro:~# usermod -aG sudo linex
root@sD13-pro:~# su - linex

Instalamos en el cliente, si no lo teníamos ya el servidor y cliente ssh:

linex@sD13-pro:~$ sudo apt install openssh-server openssh-client

Para que nos permita copiar las claves ssh al usuario “linex”, cambiamos la configuración de conexión del fichero /etc/ssh/sshd_config cambiando lo siguiente:

#PermitRootLogin prohibit-password
PermitRootLogin no

#PasswordAuthentication yes
PasswordAuthentication yes
root@sD13-pro:~# systemctl restart ssh
root@sD13-pro:~# systemctl enable ssh

Comprobamos que podemos hacer login con el usuario mediante la contraseña:

administrador@server34:~$ ssh linex@172.18.220.45
linex@172.18.220.45's password:
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-213-generic x86_64)
linex@sD13-pro:~$

El siguiente paso es copiar la clave pública de nuestro controlador Ansible a nuestro cliente:

administrador@server34:~$ ssh-copy-id -i /home/administrador/.ssh/id_ed25519.pub linex@172.18.220.45

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/administrador/.ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys linex@172.18.220.45's password:

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:

linex@sD13-pro:~$ cat /var/home/linex/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM/ox24Es73CBKzea7f4pIWphZD/+G2aVcWIVRquzAdR administrador@server34

Cambiamos para que solo se pueda conectar por ssh mediante la clave pública, cambiando 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á.

administrador@server34:~$ ssh linex@172.18.220.45
Enter passphrase for key '/home/administrador/.ssh/id_ed25519':
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-213-generic x86_64)

linex@sD13-pro:~$

Si comprobamos desde otra máquina intentando hacer login, vemos como nos indica que no tenemos la clave pública y nos indicará «Permission denied (publickey)»