SSH y SCP para acceder a equipos remotos sin escribir la clave (public key authentication)
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:
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):
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.
Y lo mismo pero en un sólo comando:
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:
o también:
en el caso de que sea la línea 8, que es el que aparece en el ejemplo anterior.