SSH clave publica y privada

La autenticación de SSH con clave pública y privada es una configuración interesante que sumará algo de seguridad a nuestro servidor SSH.

firma digital asimetrica

Autor de la imagen: Dvdrodriguez | enlace imagen

Hemos de tener en cuenta que el uso de clave pública y clave privada en SSH implica un cifrado criptográfico asimétrico que una password simple no es capaz de ofrecer. Además hace posible que los usuarios puedan acceder al server SSH sin tener que recordar contraseñas largas.

El uso del par de claves pública/privada en SSH, implica que la clave privada permanece solo en el equipo del cliente.

Mientras que la clave pública permanece en el servidor (en el archivo /home/usuario/.ssh/authorized_keys por defecto, aunque se puede modificar en el archivo /etc/ssh/sshd_config).
 

 

¿Qué es SSH?

 
SSH o “Secure SHell” es un protocolo que permite el acceso remoto por terminal a otros equipos.
SSH se usa para administrar equipos y servidores de forma remota, sobre todo con terminales “tontos” (un terminal sin entorno gráfico y sin monitor, al que se accede por red, con SSH, y por medio de terminal, no de entorno gráfico); por defecto funciona en el puerto 22, aunque se puede cambiar.
 

En este artículo:

 

 

En un principio, tal como decíamos, el uso de clave privada y pública implica más seguridad, pero en ocasiones puede resultar que el usuario puede ceder su clave privada a sus amigos o incluso venderla por Bitcoins. Esto último ha llegado a ocurrir por no configurar una seguridad adecuada.

 

 

1. Pasos necesarios para SSH con clave publica y privada

 

 
 

2. GENERAR PAR DE CLAVE PÚBLICA Y PRIVADA

 
Primero hemos de generar la clave publica en el server Linux. Y la clave privada se generará a partir de la pública.

– Podemos generar una clave publica con PuTTYgen desde Windows y luego exportarla al server (aunque ya os anticipo que la generación de claves con PuTTYgen no es del todo compatible con el formato de las claves SSH de Open SSH de Linux, y llega a dar problemas, concrétamente el error: ssh server refused our key),
 

 

– o generar las claves SSH desde linux con ssh-keygen:

ssh-keygen -t rsa

con el parametro -t le decimos qué tipo de cifrado deseamos (rsa, dsa …)

 

y la clave privada se habrá generado también, y es la que guardaremos en el equipo cliente:
 

ssh keygen

 

 

si hacemos un listado del directorio /.ssh podremos ver que se han generado las claves pública y la privada:

Se ha generado la clave pública (id_rsa.pub)
y la clave privada (id_rsa)

ssh keygen linux
 

 

2.1 Parámetros SSH-KEYGEN

 

Hay otros parámetros que podemos usar al generar un par de claves pública/privada con el comando ssh-keygen:

 
parametros ssh keygen
 

Además del parámetro -t, que permite elegir el tipo de cifrado, otros parámetros muy utilizados son:

-b : permite añadir un número de bits al crear la llave.

-c : permite añadir el archivo con la clave privada, introducir una frase de contraseña, y añadir un comentario.

-f : permite especificar el nombre del archivo de clave.

-l : permite mostrar el fingerprint o “huella dactilar” creada al generar la llave.

 

 

3. No olvidemos las directivas SSH que deben estar activadas (para el uso de clave pública y privada SSH):

 

directivas ssh claves

–> RSAAuthentication yes

–> PubkeyAuthentication yes

–> AuthorizedKeysFile                    %h/.ssh/authorized_keys

 

 

3.1 Para más seguridad, desactivar estas otras directivas SSH:

 

Ya que vamos a habilitar el acceso con clave pública/privada, es interesante deshabilitar el acceso al servidor con contraseña.

 
Esto lo conseguimos configurando la directiva PassworAuthentication yes (por defecto está en yes) con la opción no (en el archivo sshd_config),
 
PassworAuthentication
 

 

4. Otros requisitos importantes para SSH con clave pública y privada (permisos directorio .ssh y archivo authorized_keys):

 

Se han de revisar los permisos adecuados para el directorio /.ssh del usuario en el equipo cliente, y los archivos contenidos en él, incluido, claro, el archivo de clave privada; y el archivo authorized keys dentro del directorio de este usuario en el servidor SSH en el cual se autenticará (donde estará su clave pública).
 

La configuración incorrecta de estos permisos también puede dar lugar al error Server refused our key al intentar la conexión SSH al servidor.
 

*** VER ENTRADA: PERMISOS ADECUADOS EN DIRECTORIOS Y ARCHIVOS NECESARIOS PARA SERVIDOR OPEN SSH

 
permisos authorized_keys ssh
 

 

5. Exportar la clave privada desde Server SSH a un cliente

 

Tenemos varios métodos para exportar las claves SSH al equipo cliente:

  • 4.1 Podemos mover la clave privada desde el navegador de archivos si es que el sistema Linux tiene interfaz gráfica (recordar que el propietario de los archivos ha de ser el usuario en cuestión que esté trabajando en ese momento).

 

 

 

 

Conexión con smbclient (samba) desde Linux a Windows:

 
smbclient linux windows

 

 

6. Conexión SSH con clave privada desde cliente

 

*** Importante:

Si vamos a conectar desde un cliente Windos, con el cliente SSH Putty, primero habremos de convertir la clave importada al formato que utiliza Putty.
 

–> Solución para convertir la clave privada de formato PuTTY a formato Open SSH
 

Después, hemos de conectarnos por SSH con la clave privada desde el cliente (por ejemplo un cliente Windows con Putty):

introducir clave privada ssh de puttygen
 

 

6.1 Reiniciar servicio SSH

 
Para Linux Debian/Ubuntu, ejecutaremos:

/etc/init.d/ssh restart

o

service ssh restart

o

sudo systemctl restart ssh

 
Para otras distros Linux más info AQUÍ.
 

 

6.2 Éxito en conexión SSH

 

 
Éxito en conexión, pero al no haber deshabilitado la directiva PasswordAuthentication, nos sigue pidiendo el password, lo cual no necesitaríamos si ya tenemos activada la directiva y el acceso con claves pública-privada.
 
acceso ssh clave publica privada
 

Si habilitamos la directiva con la opción no (en el archivo sshd_config),

 
ssh passwordauthentication
 

podremos ver que Open SSH ya no nos pide la password sino simplemente nos autenticaremos con la clave pública-privada y el passphrase, claro:

 
ssh passwordauthentication yes
 

Y en el log del archivo auth.log podremos ver:

 

ssh accepted publickey
 

 
Bueno, pues ya hemos hecho un buen repaso de las configuraciones necesarias para utilizar SSH con clave publica y privada, en Linux (preferible) y también utilizando clientes SSH Windows con PuTTY.