Categorías
SSH

SSH: Copiar claves a un servidor remoto

En el artículo anterior se menciona la manera convencional de acceder a un equipo remoto, esto es: usando clave y contraseña. Esto puede resultar tedioso si es necesario conectarse a varios equipos, y allí es donde el comando ssh-copy-id nos acerca la solución.

Se trata de una herramienta sencilla que permite agregar una clave SSH a las claves autorizadas de un servidor remoto. Esto elimina la necesidad de una contraseña para cada inicio de sesión, garantizando así un proceso automático.

Autenticación de clave pública SSH

Las claves SSH son más seguras que las contraseñas y proporcionan una forma mucho más eficiente de iniciar sesión en SSH. Las claves SSH están automatizadas y, una vez autorizadas, permiten prescindir de una contraseña en cada inicio de sesión.

Como generar una clave SSH

Para ello utilizamos la herramienta ssh-keygen, incluida en OpenSSH al igual que ssh-copy-id. Esta herramienta genera archivos de clave pública y privada que son almacenados en el directorio ~/.ssh, como se muestra a continuación.

$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ddVOQhS6CGt8Vnertz9aiSnvOUKmSpPrZ+gI24DptsA root@user The key's randomart image is:
+---[RSA 3072]----+
|             o=o |
|             o. o|
|        . . + .+.|
|       . + + o .o|
|        S + .  . |
|. o    ..o o  + .|
|.E o   +. +. + + |
|o.  = o.o+ .o.+..|
|.o.. oo=+   o=o.+|
+----[SHA256]-----+

Nota: Si bien es posible omitir la frase de contraseña (passphrase), hacerlo no se considera una buena práctica.

Cómo copiar la clave SSH usando ssh-copy-id

Una vez que hemos generado una clave SSH, podemos añadirla manualmente al archivo authorized_keys de la máquina remota o podemos utilizar el comando ssh-copy-id para facilitar este proceso.

Basta con ejecutar ssh-copy-id y pasar la ruta de acceso a la clave pública, como sigue:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@host.dominio.edu.ar -p 3107

Después de introducir el comando anterior, se debería obtener una salida similar a:

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@host.dominio.edu.ar -p 3107
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.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
root@yunque's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p '3107' 'root@host.dominio.edu.ar'"
and check to make sure that only the key(s) you wanted were added

NOTA: Nunca copies tu clave privada a otra máquina.

En este punto, intentaremos iniciar sesión en el equipo remoto utilizando la clave que se subió, de la siguiente manera:

$ ssh -p 3107 usuario@host.dominio.edu.ar

Si ingresamos alguna, el comando anterior pedirá la frase de contraseña de la clave pública

Enter passphrase for key '/root/.ssh/id_rsa.pub':
Last login: Fri Mar  5 14:06:16 2021 from 173.208.98.186

Esto debería permitir iniciar sesión en el host remoto sin pedir la contraseña del usuario.

Opciones del comando ssh-copy-id

Se puede modificar el funcionamiento del comando ssh-copy-id utilizando los argumentos proporcionados. Para ver la página de ayuda, utilizar el comando ssh-copy-id -h sin argumentos.

  • -i: Especifica el archivo de identidad que se copiará en el host remoto. Si no se utiliza, se añadirán todos los archivos del directorio ~/.ssh con el patrón coincidente *.pub.
  • -f: Activa el modo forzado, no comprueba si la clave ya está presente dentro de las authorized_keys del equipo remoto. Como añade una clave, a menudo resulta en múltiples copias de la misma clave instaladas en el equipo remoto.
  • -p: Especifica el puerto SSH para conectarse al host remoto. Se utiliza cuando no se usa el puerto SSH predeterminado.
  • -n: Realiza una simulación que muestra las claves sin instalarlas en el host remoto.

Si bien este puede ser un método simple y eficiente para instalar llaves, las llaves mal configuradas pueden resultar en problemas de seguridad o en el bloqueo del sistema. Por lo tanto, se debe tener mucho cuidado al experimentar con este proceso.

Solución de problemas

Hay varias razones por las que la prueba puede fallar:

  • El servidor puede no estar configurado para aceptar la autenticación de clave pública. Debemos cerciorarnos de que /etc/ssh/sshd_config en el servidor contiene PubkeyAuthentication yes y luego reiniciar el proceso sshd en el servidor.
  • El cliente también debe permitir la autenticación con clave pública. Comprobar que /etc/ssh/config incluye PubkeyAuthentication yes.
  • Si se intenta iniciar sesión como root, es posible que el servidor no esté configurado para permitir el inicio de sesión como root. Debemos cerciorarnos que /etc/sshd_config incluye PermitRootLogin yes, PermitRootLogin prohibit-password, o without-password. Si se establece como forced-commands-only, la clave debe configurarse manualmente para utilizar un comando forzado (ver la opción command= en ~/.ssh/authorized_keys.
  • Probar añadir la opción -v al comando ssh utilizado para la prueba. Leer la salida para ver lo que dice sobre si se prueba la clave y qué métodos de autenticación está dispuesto a aceptar el servidor.
  • OpenSSH sólo permite probar un máximo de cinco claves de forma automática. Si hay más claves, se debe especificar qué clave usar empleando la opción -i de ssh.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.