X

Cómo utilizar public keys con ssh y linux paso a paso

Hay infinidad de manuales, guías y tutoriales, sobretodo en inglés, pero desgraciadamente la mayoría de ellos requieren un mínimo de conocimientos para poder llevarlos a cabo y se dejan cosas que desde el punto de vista menos experimentado puede ser un poco crítico. En este artículo voy a explicar cómo utilizar ssh en linux sin contraseña mediante public keys.

Puede que no sea el tuyo, pero he visto unos cuantos casos en los que el usuario que pregunta ha seguido una serie de guías y manuales sin conseguir hacer funcionar las llaves públicas para ya bien ejecutar comandos o conectarse a un servidor a través de ssh sin utilizar contraseña.

Esto es lo que vamos a ver paso a paso en este tutorial en el que intentaré que de forma sencilla seas capaz de tener funcionando tus public keys en dos minutos y prácticamente sin pestañear.

Cómo utilizar ssh en linux sin contraseña

Para llevar a cabo este tuto voy primero a aclarar un par de cosas, ya que tendremos que tocar tanto en nuestra máquina local como en el servidor al que nos vayamos a conectar, así que vamos a ver las dos definiciones de los equipos que vamos a utilizar.

  • Cliente: será el equipo con el que nos vamos a conectar o desde el que vamos a enviar los comandos.
  • Servidor: será el equipo remoto sobre el que nos queremos conectar con el equipo cliente.

Le vamos a dar estos dos nombres ya que quiero que quede bien claro lo que hay que hacer en cada uno de ellos, por que es una cosa que no está muy clara en muchas guías, lo que podría provocar que se hiciera al revés.

Cliente
Accederemos a nuestro equipo con el usuario que ejecutará los comandos o se conectará sin la contraseña

Cliente
Ejecutaremos el siguiente comando

ssh-keygen -o -a 100 -t ed25519

o con encriptación obsoleta
ssh-keygen -t rsa

OJO: las claves rsa están obsoletas, lo mejor es utilizar ed25519 pero si tu servidor ssh no está actualizado no te dejará conectar. Si has usado ed25519 cambia id_rsa por id_ed25519 en los siguientes pasos.

Como no queremos utilizar contraseña cuando nos pida una le daremos directamente al intro un par de veces para confirmar, y veremos que nos generará una especie de imágen en la consola así como nos avisará de que ha creado dos archivos

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:
6a:19:87:aa:5e:43:67:0f:1d:f8:ff:99:48:1b:bf:25 root@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|     .           |
|    . E          |
|      B.      =  |
|    . *. .       |
|     +.    .     |
|     .o.         |
|    +.  .        |
|       o +       |
|    +.Oo         |
+-----------------+

Cliente
Abriremos el archivo /root/.ssh/id_rsa.pub y copiaremos su contenido (también podemos si queremos cargarlo por ftp al servidor)

Servidor
Pegaremos el contenido del archivo que hemos copiado dentro del archivo /root/.ssh/authorized_keys, al ser una cadena de texto plano podremos hacerlo con el editor de texto que mejor nos convenga.

Servidor
Reiniciaremos el servicio ssh

CentOS: service sshd restart
Ubuntu: service ssh restart

Problemas y soluciones en caso de fallos

Si no podemos copiar el contenido para pegarlo encima del archivo authorized_keys bastará con que subamos al servidor por ftp, sftp, rsync, etc, nuestro archivo id_rsa.pub generado en el cliente.

Una vez subido podemos entrar en la consola del servidor, navegar hasta la carpeta donde hayamos subido el archivo con el comando ‘cd‘ y ejecutar lo siguiente:

cat id_rsa.pub >>~/.ssh/authorized_keys

Este comando copiará el contenido de nuestro archivo id_rsa.pub a una nueva línea en el archivo authorized_keys (recuerda, esto en el servidor donde has subido el archivo). Luego reinicia ssh (servidor).

Otro problema es que tengamos los permisos de los ficheros de forma incorrecta, cosa que también puede provocar errores como:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]

Esto lo solucionaremos ejecutando en el servidor los siguientes comandos para poner los permisos correctamente:

chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Otra cosa que nos puede pasar es que esté desactivado el acceso remoto con clave de autenticación, por lo que tendremos que activarlo. Para ello en el servidor editaremos el archivo de configuración de ssh:

nano nano /etc/ssh/sshd_config

y deberemos descomentar las siguientes líneas para que queden como a continuación:

PubkeyAuthentication yes
RSAAuthentication yes

Como para el resto de opciones debemos reiniciar el servidor de ssh para que los cambios surtan efecto. Después de esta serie de soluciones al intentar conectar desde el cliente al servidor ya no debería pedirnos contraseña, como mucho una confirmación de que nos queremos conectar de esa forma, que quedará guardada y no será necesario volver a confirmar.

Cómo configurar el acceso por clave pública con putty

Ahora ya sabes cómo generar claves públicas y privadas, y colocarlas en el servidor donde vas a realizar la conexión. Pero si estás trabajando con una máquina en windows y quieres conectarte como cliente a un servidor en linux desde putty necesitarás configurar la conexión.

Para esto te dejo aquí este otro tutorial: Cómo configurar putty con clave pública y privada para acceder a linux.

En este artículo te enseño a utilizar las claves para poder conectar con putty sin tener que poner una contraseña. Una vez lo tengas hecho es recomendable que guardes las claves a buen recaudo y desactives la posibilidad de conectar al servidor con nombre de usuario y password para aumentar la seguridad.

¿Usas claves públicas? Si te han dado problemas comenta cómo lo has solucionado.

VicHaunter:
    Categorías: Ayuda
Artículo relacionado
Los comentarios de Disqus están cargando....

Como todos, usamos cookies.