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.
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).
En este artículo:
- Qué es la autenticación SSH con clave pública y privada.
- 1. Pasos necesarios para SSH con clave publica y privada
- 2. Generar el par de Clave Pública y clave Privada.
- 3. Directivas SSH que deben estar activadas.
- 4. Otros requisitos importantes (permisos ficheros ssh).
- 5. Exportar la clave privada desde Server a un cliente
- 6. Conexión SSH con clave privada desde cliente
1. Pasos necesarios para SSH con clave publica y privada
- Generar el par de claves pública/privada (desde Linux o Windows).
- Exportar/Copiar la llave pública al servidor (hay varios métodos).
- Deshabilitar el acceso SSH por contraseña en el servidor (Revisar Directivas SSH).
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),
1 | 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:
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)
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:
-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):
–> 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),

4. Otros requisitos importantes para SSH con clave pública y privada (permisos directorio .ssh y archivo authorized_keys):
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.

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).
- 4.2 A través de la terminal, por ejemplo con ssh-copy-id
- 4.3 Con Winscp
- 4.4 Con Samba (nosotros vamos a utilizar este método): –> Cómo copiar archivo de Linux a Windows a través de terminal
Conexión con smbclient (samba) desde Linux a Windows:
6. Conexión SSH con clave privada desde cliente
*** Importante:
Después, hemos de conectarnos por SSH con la clave privada desde el cliente (por ejemplo un cliente Windows con Putty):
6.1 Reiniciar servicio SSH
Para Linux Debian/Ubuntu, ejecutaremos:
1 | /etc/init.d/ssh restart |
o
1 | service ssh restart |
o
1 | 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.
Si habilitamos la directiva con la opción no (en el archivo sshd_config),
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:
Y en el log del archivo auth.log podremos ver: