ssh con autenticación de clave pública
Vamos a ver cómo podemos usar ssh y/o scp con autenticación de clave pública. O de dicho de otro modo, cómo podemos acceder a máquinas remotas sin necesidad de autenticarnos con la password del usuario remoto.
Las pasos que tenemos que dar son:
1. Crear un par de claves (pública y privada):
$ ssh-keygen -b 4096 -t rsa
[…]
El par de claves generadas (ficheros id_rsa.pub e id_rsa en este caso) se guardan en el directorio $HOME/.ssh/ del usuario.
2. Copiar la clave pública del usuario (fichero id_rsa.pub) en el servidor remoto. La mejor manera de hacerlo es ejecutando:
$ ssh-copy-id usuario_remoto@servidor_remoto
[…]
La clave pública del usuario es almacenada en el fichero $HOME/.ssh/authorized_keys del usuario remoto.
3. Ejecutamos ssh o scp
La primera vez que accedemos al servidor remoto su host key se guarda en el fichero $HOME/.ssh/know_hosts del usuario. A partir de ese momento podemos utilizar ssh y scp sin necesidad de escribir la password del usuario remoto.
Permisos:
Cuando esto no funciona, lo habitual es que haya un problema con los permisos de los directorios o ficheros implicados en el proceso, incluyendo los permisos del directorio $HOME de los usuarios.
- El directorio .ssh debe tener permisos 700
(rwx------)
- El fichero authorized_keys y el fichero con la clave privada deben tener permisos 600
(rw-------)
- El fichero con la clave pública debe tener permisos 644
(rw-r--r--)
- El directorio $HOME puede tener permisos 755 o 744 o 711 o cualquier otro que conceda únicamente al usuario permisos de escritura. Es decir, nadie más a parte de él puede tener permiso de escritura. Si en el fichero /etc/ssh/sshd_config la opción StrictModes está activa esta condición es de obligado cumplimiento.
Más información:
$ man sshd
$ man ssh-keygen
$ man ssh-copy-id