Cómo configurar SSH para poder usar ssh y scp para acceder a otras máquinas autorizadas sin necesidad de indicar la clave de usuario cada vez que se conecta. También muy útil cuando se usan repositorios remotos que se acceden por SSH.

Crear las claves

Desde del directorio $HOME del usuario:

pepe@cliente:~$ ssh-keygen -b 4096 -t rsa

Eso genera $HOME/.ssh/id_rsa y $HOME/.ssh/id_rsa.pub que son las claves privada y publica para el sistema RSA.

Copiar la clave pública a otros hosts

Con el programa específico que viene con SSH (la forma correcta):

pepe@cliente$ ssh-copy-id pepe@servidor

La primera vez que se accede a una máquina se almacena su host_key en el fichero $HOME/.ssh/know_hosts. A partir se ese momento puedes utilizar ssh y scp con esa máquina sin necesidad de escribir la clave.

Evidentemente, esto se puede repetir para cualquier pareja de máquinas y en ambos sentidos si se desea.

Formas alternativas

En la gran mayoría de las máquinas en las que tengas un SSH mínimamente moderno podrás utilizar el método explicado en la sección anterior. Si por cualquier razón resulta que no dispones del programa ssh-copy-id hay formas alternativas de lograr lo mismo.

Copiando a mano la clave pública de tu usuario@host en el fichero authorized_keys de la máquina que quieres que te deje entrar sin clave.

pepe@cliente:~$ scp .ssh/id_rsa.pub pepe@servidor:.ssh/nueva_clave
pepe@cliente:~$ ssh pepe@servidor
pepe@servidor:~$ cd .ssh/
pepe@servidor:~$ cat nueva_clave >> authorized_keys
pepe@servidor:~$ rm nueva_clave

Y lo mismo pero en un sólo comando:

pepe@cliente$ cat ~/.ssh/id_rsa.pub | ssh pepe@servidor 'cat - >> ~/.ssh/authorized_keys' 

En todos los casos, el directorio .ssh en el servidor debe existir y el fichero authorized_keys debe tener los permisos correctos (0600).

Permisos

El servidor de SSH suele asegurarse de que las claves públicas no están comprometidas, para ello hay que activar la opción StrictModes en el fichero /etc/ssh/sshd_config. Para ello comprueba los permisos de la ruta $HOME/.ssh/authorized_keys. Este fichero debe tener permisos 600 y el directorio .ssh debe tener permisos 700. De no haber activado esta opción no es necesario establecer permisos especiales para esos ficheros.

Cambio de identidad de un host

A veces, es posible que al conectar a otra máquina aparezca un mensaje de advertencia como el siguiente y no es posible realizar la conexión.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
c6:70:0f:ff:2d:a7:40:b8:82:e5:ed:35:b4:d6:77:ca.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:<b>8</b>
RSA host key for server has changed and you have requested strict checking.
Host key verification failed.

Esto se debe a que la clave pública del host al que intentas conectar es diferente que la tú tienes registrada. Éste puede ser un signo de que algo va mal, alguien está suplantado esa maquina. Pero la mayoría de las veces se debe a que se ha regenerado la clave pública del host o se ha instalado otra versión, etc, etc.

En ese caso, lo que debes hacer el borrar la clave pública que tienes almacenada para esa máquina. El mensaje de advertencia indica que debes borrar una línea concreta de tu fichero ~/.ssh/known_hosts, que es la que contiene la famosa clave. Eso puedes hacerlo con cualquier editor de texto o puedes ejecutar simplemente esto:

$ ex -c "<b>8</b>d|x" ~/.ssh/known_hosts

o también:

$ sed -i <b>8</b>d ~/.ssh/known_hosts

en el caso de que sea la línea 8, que es el que aparece en el ejemplo anterior.

Enlaces




blog comments powered by Disqus