Anteriormente demostré cómo utilizar autenticación con clave pública en SSH. Veamos ahora cómo copiar fácilmente una clave pública de SSH empleando el utilitario ssh-copy-id, lo cual permite el acceso al servidor destino sin necesidad de ingresar la contraseña del usuario.



Antes de comenzar, es necesario asegurarse de que el usuario actual cuente con un par de claves para autenticación a través de SSH. Basta con listar el contenido del directorio ~/.ssh/ y comprobar que exista un par de archivos que tengan el prefijo id_ en el nombre:

emi@vaio:~$ ll .ssh/
total 44
-rw------- 1 emi emi   505 Apr  2 08:47 id_ecdsa
-rw-r--r-- 1 emi emi   173 Apr  2 08:47 id_ecdsa.pub
-rw-r--r-- 1 emi emi 29702 Jun 10 16:21 known_hosts

En este caso se trata de un par de claves ECDSA (Elliptic Curve Digital Signature Algorithm). Este es el tipo de clave más recomendado en la actualidad por su eficiencia y seguridad y es utilizado por Bitcoin. Otros tipos de clave pueden ser dsa (DSA), rsa (RSA) y ed25519 (EdDSA).

Si no existe ningún par de claves (pública y privada), será necesario crearla (tal como explica el artículo Cómo autenticar con clave pública en SSH:

$ ssh-keygen -t ecdsa

Si la clave pública del usuario actual en el sistema local no está "instalada" (insertada dentro del correspondiente archivo authorized_keys del usuario remoto), el servidor solicita la contraseña del usuario al intentar ingresar:

emi@vaio:~$ ssh -p 2222 root@servidor
root@servidor's password:

El artículo mencionado anteriormente explicaba cómo instalar la clave pública del usuario (archivo con extensión .pub) de forma manual copiando su contenido por SSH dentro del archivo authorized_keys del usuario en el servidor. Sin embargo, existe un utilitario ssh-copy-id que permite hacer este trabajo de forma automática. Sólo basta con pasar como parámetro la ruta a la clave pública con la opción -i y los parámetros de conexión:

emi@vaio:~$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub -p 2222 root@servidor
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/emi/.ssh/id_ecdsa.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@servidor's password: 

Number of key(s) added: 1

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

Lógicamente este comando requiere de la contraseña del usuario en el host remoto, ya que se conecta vía SSH para copiar la clave pública. Sin embargo, si todo sucede con éxito ésta será la última vez que tengamos que tipear la contraseña del usuario:

emi@vaio:~$ ssh -p 2222 root@servidor
Linux servidor 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 16 19:25:34 2020 from 181.197.199.132
root@servidor:~#

Se observa que se ha ingresado al servidor sin necesidad de ingresar la contraseña.

Si no funciona, será necesario verificar la configuración del servidor SSH (/etc/ssh/sshd_config) en el host remoto y verificar que esté habilitada la autenticación con clave pública:

PubkeyAuthentication yes

Y luego reiniciar el servicio:

# service ssh reload


Tal vez pueda interesarte


Compartí este artículo