¿Cómo configurar las claves SSH?

Actualizado el 10 de agosto, 2016. Por BlueHosting.

Las claves SSH proveen una alternativa más segura para iniciar sesión en un servidor virtual privado con SSH, en comparación con el inicio de sesión tradicional usando un nombre de usuario y contraseña. Mientras que una contraseña puede ser eventualmente robada con un ataque de fuerza bruta, las claves SSH son casi imposibles de descifrar usando un ataque de fuerza bruta por sí solo. Generar un par de claves le proporciona dos cadenas largas de caracteres: una pública y una privada. Puede situar la clave pública en cualquier servidor, y luego desbloquearlo conectándose a este con un cliente que ya tenga la clave privada. Cuando estas dos claves coinciden, el sistema se desbloqueará sin necesidad de ingresar una clave. Puede aumentar la seguridad aun más, protegiendo la clave privada con un passphrase o contraseña.

Primer paso: crear el par de claves RSA

El primer paso es crear su par de claves en la máquina cliente (hay una gran posibilidad de que esta máquina sea solo su computador). Ejecute el siguiente comando:

ssh-keygen -t rsa

Segundo paso: almacenar las claves y Passphrase

Una vez que haya ingresado al comando del generador de claves, se le harán algunas preguntas adicionales:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/miusuario/.ssh/id_rsa):

Puede hacer Enter, guardando el archivo en el directorio /home del usuario (en nuestro ejemplo, el usuario de ejemplo es miusuario).

Luego se le solicitará un passphrase, que no es más que una contraseña adicional que trabaja en conjunto con las claves SSH, proporcionando seguridad adicional. No es obligatorio especificar un passphrase, si no desea hacerlo, deje el campo en blanco y presione Enter.

Enter passphrase (empty for no passphrase):

Depende de usted si desea o no usar un passphrase. Ingresar una contraseña o passphrase adicional a las claves SSH tiene sus beneficios: la seguridad de una clave, no importa qué tan encriptada esté, aún depende del hecho de que sea visible o no para alguien más. En caso de que una clave privada protegida a través de un passphrase caiga en manos de un usuario no autorizado, no podrán ingresar a las cuentas asociadas a esas claves SSH hasta que tengan ese passphrase, dándole al usuario afectado un poco más de tiempo. La única desventaja de tener un passphrase es, obviamente, tener que tipiar esta contraseña cada vez que se inicie sesión usando el par de claves rsa -o dsa.

El proceso completo para la generación de una clave luce como lo siguiente:

[miusuario@vps ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/miusuario/.ssh/id_rsa):
Created directory '/home/miusuario/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/miusuario/.ssh/id_rsa.
Your public key has been saved in /home/miusuario/.ssh/id_rsa.pub.
The key fingerprint is:
12:34:56:78:9a:bc:de:fg:hi:jk:lm:no:pq:rs:tu:vw miusuario@vps.midominio.com
The key's randomart image is:
+--[ RSA 2048]----+
|   o=.           |
|   .+++          |
|  o .o.          |
| . +.. B  o      |
| o  o.o S        |
|+oS   ..         |
|++  ..           |
| ++=o            |
|.Eoo             |
+-----------------+

La clave pública está ahora ubicada en /home/miusuario/.ssh/id_rsa.pub. La clave privada (identificación) está ubicada en /home/miusuario/.ssh/id_rsa.

Tercer paso: copiar la clave pública

Una vez que el par de claves sean generadas, es momento de ubicar la clave pública en el servidor virtual que queremos utilizar.

Puede copiar la clave pública en el archivo authorized_keys de la nueva máquina con el comando ssh-copy-id. Asegúrese de remplazar el nombre de miusuario y la dirección IP que se muestra a continuación:

ssh-copy-id miusuario@123.45.56.78

De forma alternativa, puede pegar las claves usando SSH:

cat ~/.ssh/id_rsa.pub | ssh miusuario@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

Sin importar qué comando utilizó, debería ver algo similar a lo siguiente:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is 12:34:56:78:9a:bc:de:fg:hi:jk:lm:no:pq:rs:tu:vw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
miusuario@12.34.56.78's password: 
Now try logging into the machine, with "ssh 'miusuario@12.34.56.78'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Ahora puede intentar ingresar a miusuario@12.34.56.78 a través de SSH y no se le solicitará un nombre de usuario y contraseña. Sin embargo, si usted configuró un passphrase, se le pedirá que ingrese dicho passphrase en ese momento y siempre que inicie sesión en el futuro.

Cuarto paso (opcional): Desactivar la contraseña de inicio de sesión para Root

Una vez que haya copiado sus claves SSH en su servidor, y que se haya asegurado de que puede ingresar únicamente con las claves SSH, puede continuar y restringir el acceso de inicio de sesión de usuario root, para que solo se permita el acceso utilizando claves SSH.

Para hacerlo, abra el archivo de configuración SSH (también puede usar el editor vi en lugar de nano):

sudo nano /etc/ssh/sshd_config

Dentro de ese archivo, encontrará la línea que incluye el parámetro PermitRootLogin. Debe modificarla si desea que los usuarios solo puedan conectarse con la clave SSH, la línea quedaría así:

PermitRootLogin without-password

Para que los cambios surtan efecto ejecute:

/etc/init.d/sshd restart

Dependiendo del Sistema Operativo que utilice, el último comando podría cambiar a: /etc/init.d/ssh restart o reload ssh.

Recursos adicionales

Aunque este es un tema básico en la seguridad de servidores, muchos usuarios tienden a confundir y mezclar conceptos al respecto. Es importante documentarse correctamente para evitar errores (por ejemplo: bloquear su propio acceso al servidor). Puede consultar los siguientes recursos en busca de información adicional que complemente lo descrito en este tutorial. Aunque este material es provisto esperando que sea útil, tome en cuenta que no podemos dar fe de la actualidad o precisión de los contenidos externos.

  • Artículo del MIT (Instituto Tecnológico de Massachusetts) que explica de forma breve el protocolo SSH (documentación RHEL).
  • Hay variedad de información en línea respecto a SSH, navegue en fuentes confiables y actualizadas para ampliar su conocimiento sobre el tema.

¿QUÉ DESEAS SABER?

Intentaremos leer tu mente...