como-conectarse-por-ssh-sin-password-generando-una-key-ssh-en-raspberry-pi

Cómo conectarse por SSH sin contraseña generando una clave SSH en Raspberry Pi

Hemos visto como usar SSH para conectar un terminal seguro a nuestra Raspberry Pi. Es una de las herramientas más potentes y que más frecuentemente usaremos al trabajar con sistemas remotos.

Sin embargo, usar SSH nos obligará a introducir constantemente la contraseña. Lo cual, si la contraseña es larga (y por seguridad debería serlo) pues que queréis que os diga… es un auténtico peñazo 😄.

Tenemos una alternativa muy usada y recomendada que es generar un par de claves criptográficas para usar como sistema de autentificación SSH.

Este método utiliza un par de claves criptográficas asimétricas (una clave pública y una clave privada) para autenticarte, eliminando la necesidad de ingresar una contraseña cada vez que te conectas.

Vamos a ver como configurarlo.

Generar el par de claves SSH en el dispositivo cliente

En primer lugar, necesitamos un par de claves SSH. Este primer paso lo tenemos que hacer en el dispositivo cliente (es decir, en el equipo con el cuál nos conectaremos a la Raspberry Pi , por ejemplo tu PC).

Windows 10 en adelante, y la mayoría de distribuciones de Linux tienen SSH instalado (OpenSSH o similar)

Para ello, abrimos una terminal en tu dispositivo cliente (que puede ser Windows, Linux, o WSL, por ejemplo)

Ejecutamos el siguiente comando para generar un par de claves SSH:

ssh-keygen -t rsa -b 4096 -C "tu_email@example.com"

Donde,

  • -t rsa: Especifica el tipo de algoritmo de cifrado, en este caso RSA
  • -b 4096: Define el tamaño de la clave en bits (4096 es una longitud segura)
  • -C tu_email@example.com: Opcional, añade un comentario para identificar la clave (por ejemplo un correo electrónico)

A continuación, el sistema nos pide que elijamos una ubicación para guardar la clave

Enter file in which to save the key (/home/usuario/.ssh/id_rsa):

Podemos dejar el nombre por defecto, o ponerle el que queramos. (por ejemplo la App, o el nombre del cliente).

O podemos pulsar Enter para aceptar la ubicación predeterminada (la carpeta .ssh).

Independientemente del nombre del fichero que elijamos, si es conveniente dejar la ruta .ssh

Finalmente, el sistema nos permite opcionalmente añadir una contraseña (passphrase) para proteger la clave privada

Enter passphrase (empty for no passphrase):

Podemos dejarlo en blanco si preferimos no tener que introducir una contraseña cada vez que uses la clave SSH (es menos seguro, pero uno de nuestros objetivos es no tener que meter todo el rato contraseñas ¿no?)

Este proceso generará dos ficheros

  • id_rsa, clave privada que debemos conservar en el cliente (y no dar nunca a nadie)
  • id_rsa.pub, clave pública que debemos copiar a la Raspberry Pi

Copiar la clave pública a la Raspberry Pi

Ahora que tenemos nuestro par de claves, tenemos que copiar la clave pública id_rsa.pub a la Raspberry Pi.

El contenido de este fichero se tiene que añadir a la carpeta .ssh dentro del home del usuario, en Raspberry Pi, en un fichero llamado authorized_keys.

Para eso tenemos dos opciones:

Desde otro Linux

Si estamos trabajando con un cliente Linux (por ejemplo, tu ordenador es un Ubuntu o un WSL desde Windows) tendremos acceso a una utilidad llamada ssh-copy-id que hace todo pro nosotros.

ssh-copy-id usuario@direccion_ip

Simplemente reemplaza con el nombre de usuario y la dirección IP de tu Raspberry Pi (por ejemplo, pi@192.168.1.100)

Este comando copiará la clave pública desde tu dispositivo cliente al archivo ~/.ssh/authorized_keys en tu Raspberry Pi. Durante este proceso, se te pedirá la contraseña de tu Raspberry Pi para completar la operación.

Si has cambiado el nombre del certificado (en lugar del de por defecto id_rsa), puedes especificar el nombre del fichero.

ssh-copy-id -i ~/.ssh/nombre_fichero.pub usuario@direccion_ip

Desde Windows

Si no tenemos disponible la herramienta ssh-copy-id, tendremos que copiarlo “a mano”. Tampoco os preocupéis, que no es demasiado difícil.

Simplemente tenemos que añadir el contenido de la clave pública id_rsa.pub al fichero ~/.ssh/authorized_keys del usuario.

Por ejemplo, podéis copiarlo mediante scp con este comando

scp id_rsa.pub usuario@direccion_ip:/home/nombre_usuario/id_rsa.pub

Y luego, conectándonos por ssh, añadimos el contenido del id_rsa.pub a ~/.ssh/authorized_keys (por ejemplo, con el editor nano).

ssh usuario@direccion_ip

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

O también podríamos añadirlo así (yo prefiero copiarlo a mano con nano)

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

Finalmente, nos aseguramos de los permisos de los ficheros son correctos

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Borra el fichero id_rsa.pub que has copiado de la Raspberry Pi, cuando hayas terminado de copiar su contenido a authorized_keys

Script de PowerShell para configurarlo en un paso:

$USER_AT_HOST="username@remote-machine-IP"
$PUBKEYPATH="$HOME\.ssh\id_nombre.pub"

$pubKey=(Get-Content "$PUBKEYPATH" | Out-String); ssh "$USER_AT_HOST" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '${pubKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Donde, antes de copiar, debes sutituir

  • username@remote-machine-IP, por tu nombre de usuario en Raspberry Pi, y la IP de la Raspberry Pi (o su hostname)
  • id_nombre.pub por el nombre que le hayas dado a tu fichero de claves :::

Verificar autentificación habilitada

Opcional, pero conviene verificar que la autenticación mediante clave pública está habilitada en la Raspberry Pi.

Para ello, debes editar el archivo /etc/ssh/sshd_config y asegurarte de que las siguientes líneas estén descomentadas y tengan el valor “yes”:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

Si has cambiado algo, reinicia el servicio SSH en la Raspberry Pi para que los cambios surtan efecto

sudo systemctl restart ssh

Conectarse a la Raspberry Pi sin contraseña

Ya hemos hecho lo difícil. Ahora queda comprobar que todo funciona correctamente. Deberías poder conectarte a tu Raspberry Pi sin necesidad de introducir una contraseña,

ssh nombre_usuario@direccion_ip

Si todo ha ido bien, deberías iniciar sesión en tu Raspberry Pi automáticamente sin necesidad de ingresar una contraseña.

Configuración adicional (opcional)

Si deseas mejorar la seguridad de tu conexión SSH, podéis desactivar la autenticación por contraseña en tu Raspberry Pi. De este modo, que solo se permitirán hacer conexiones mediante claves SSH. Para hacerlo:

Abrimos el archivo de configuración de SSH en la Raspberry Pi:

sudo nano /etc/ssh/sshd_config

Busca la línea que dice #PasswordAuthentication yes y cámbiala a:

PasswordAuthentication no

Guardamos los cambios y reinicia el servicio SSH:

sudo systemctl restart ssh

Tened en cuenta que, si os equivocáis en algo, podéis perder el acceso remoto a vuestra Raspberry Pi, y tendréis que conectaros físicamente a ella


Como medida, siempre está bien dejar al menos una de las cuentas de admin con acceso con contraseña