Skip to main content

Cómo generar una clave SSH en Linux

La autenticación con clave pública para conectarse a un servidor remoto usando el protocolo SSH funciona con dos claves: una pública y otra privada. Para entender el funcionamiento se suele recurrir a la metáfora del candado y la llave. La clave pública funciona como un candado y la privada como la llave. El candado se colocará en el servidor remoto al que se quiere acceder; cuando se intenta acceder se comprobará que la máquina que intenta conectar tiene la llave, la clave privada.

Para configurar el acceso SSH con clave pública hay que:

Generar el par de claves pública/privada.

Copiar la clave pública al servidor.

Deshabilitar el acceso al servidor con contraseña.

Clientes Windows

Si necesitas crear el conjunto de claves en Windows con Putty, puedes encontrar la información aquí. Si usas el subsistema Linux en Windows, el proceso es igual que en Linux y se describe a continucación

CÓMO GENERAR EL PAR DE CLAVES PÚBLICA/PRIVADA

Para generar las claves se puede usar ssh-keygen en la máquina local desde la que se quiere conectar con el servidor:


# ssh-keygen -b 4096
 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/usuario/.ssh/id_rsa):
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in id_rsa.
 Your public key has been saved in id_rsa.pub.
 The key fingerprint is:
 SHA256:GKW7yzA1J1qkr1Cr9MhUwAbHbF2NrIPEgZXeOUOz3Us ylo@klar
 The key's randomart image is:
 +---[RSA 4096]----+
 |.*++ o.o.        |
 |.+B + oo.        |
 | +++ *+.         |
 | .o.Oo.+E        |
 |    ++B.S.       |
 |   o * =.        |
 |  + = o          |
 | + = = .         |
 |  + o o          |
 +----[SHA256]-----+
 #

Pide la ruta y el nombre del archivo que alojará las claves pública y privada. Se puede guardar donde se quiera, pero la carpeta debe tener permisos 700 y el archivo con la clave privada 600. De lo contrario la conexión no se establecerá. La clave privada se puede proteger a su vez con una contraseña. De esta manera, si cae en manos no deseadas, lo tendrá un poco más difícil para usarla.

habitualmente se almacena en el directorio:

~/.ssh

ssh-keygen generará dos archivos:

id_rsa es la clave privada, la que permanecerá en la máquina local.

id_rsa.pub es la clave pública, la que se tiene que copiar al servidor remoto al que se quiere acceder.

Generar una clave ED25519

Las claves ed25519 es una solución de criptografía relativamente nueva que implementa el algoritmo de firma digital de curva de Edwards (EdDSA). Es compatible con OpenSSH desde hace unos años, por lo que la mayoría de sistemas actuales soportan esta clave criptográfica

En comparación con el tipo más común de clave SSH, RSA, ed25519 trae una serie de mejoras interesantes:

  • La generación y la verificación son más rápidas
  • Es más segura
  • Es más resistente contra los ataques de fuerza bruta en los que se generan gran cantidad de Hash a la espera de que alguno sea validado.
  • Las claves son más pequeñas a la hora de hacer un copia/pega.

El procedimiento es sencillo:

ssh-keygen -t ed25519 -C "ateinco@ateinco.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/users/eduardo/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/users/eduardo.ssh/id_ed25519.
Your public key has been saved in /home/users/eduardo/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:FHsTXXXXXXXXXXXpw4o7+rp+M1yqMyBF8vXSBRkZtkQ0RKY ateinco@ateinco.com
The key's randomart image is:
+--[ED25519 256]--+
|       */Xoo     |
|  . . .===..o    |
|   + .Eo+.oo     |
|    o ..o.+.     |
|   .   .S  + .   |
|  . .     . *    |
|   . . . + o .   |
|      o O .      |
|     .*Xo=       |
+----[SHA256]-----+


COPIAR LA CLAVE PÚBLICA AL SERVIDOR

Una vez generado el par de claves en la máquina local hay que copiar la clave pública al servidor remoto. Esto lo podemos realizar de dos formas

CON SCP
user@localmachine$ scp ~/.ssh/id_rsa.pub user@remotemachine:/home/user/uploaded_key.pub

La clave pública hay que incluirla en el archivo /home/user/.ssh/authorized_keys. Si la carpeta .ssh no existe, la creamos antes de copiar, así como el archivo authorized_keys:

user@remotemachine$ mkdir .ssh
user@remotemachine$ chmod 700 .ssh
user@remotemachine$ touch .ssh/authorized_keys
user@remotemachine$ chmod 600 .ssh/authorized_keys

Por último copiamos la clave y borramos el archivo copiado al servidor:

user@remotemachine$ echo `cat ~/uploaded_key.pub` >> ~/.ssh/authorized_keys
user@remotemachine$ rm /home/user/uploaded_key.pub
USANDO SSH-COPY-ID
user@localmachine$ssh-copy-id -i ~/.ssh/id_rsa.pub user@remotemachine
user@remotemachine$ password:
Now try logging into the machine, with "ssh 'remote-host'", and check in:
.ssh/authorized_keys

DESHABILITAR EL ACCESO AL SERVIDOR CON CONTRASEÑA

Una vez habilitado el acceso SSH mendiante clave pública, se puede deshabilitar el acceso con contraseña. Esto aumentará la seguridad, pero implica que si se pierde la clave privada se perderá el acceso al servidor: hay que guardar cuidadosamente la clave privada.

La configuración del servidor SSH se puede encontrar en el archivo /etc/ssh/sshd_config. Para deshabilitar el acceso SSH con contraseña hay que añadir la siguiente línea, editando el archivo como root:

PasswordAuthentication no

Para aumentar la seguridad se pueden hacer dos ajustes adicionales en el archivo /etc/ssh/sshd_config:

Desactivar el acceso ssh para el usuario root:

PermitRootLogin no

Dar acceso SSH solo a los usuarios que lo necesiten, y no a todos:

AllowUsers usuario1 usuario2

Una vez realizados los cambios, hay que reiniciar el servidor SSH, siempre como root:

service sshd restart

ACCEDER AL SERVIDOR CON CLAVE PÚBLICA

Para conectarse al servidor con clave pública en vez de contraseña

user@localmachine$ ssh user@remotemachine