Configuración de servidor SSH con criptografía pública

En la entrada anterior instalamos y configuramos un servidor SSH para permitir conexiones remotas.

En la presente entrada elevaremos la seguridad haciendo uso de llaves públicas, para que solo los usuarios que posean las claves puedan establecer la conexión remota con el servidor.

El uso de autenticación por clave pública proporciona muchos beneficios:

  • Permitir que varios desarrolladores inicien sesión como el mismo usuario del sistema sin tener que compartir una sola contraseña entre ellos.
  • Revocar el acceso de un solo desarrollador sin revocar el acceso de otros desarrolladores y
  • Facilitan que un solo desarrollador inicie sesión en muchas cuentas sin necesidad de administrar muchas contraseñas diferentes.

1.- Crear la clave privada y pública

Lo primero que necesitamos será crear un id_rsa y id_rsa.pub que son las claves privadas y públicas respectivamente. Esto lo realizaremos en el equipo cliente.

Si estás usando Windows, puedes generar las claves en tu servidor. Solo recuerda copiar tus claves a tu laptop y eliminar tu clave privada del servidor después de haberlo generado.

Para generar un par de claves SSH, ejecuta el siguiente comando:

$ ssh-keygen

Esto generará algo como lo siguiente

[laptop1@yourname$] ssh-keygen
Generating public/private rsa key pair

Se te preguntará por el directorio donde deseas guardar los archivos, es buena practica dejarlas en el directorio sugerido, a menos que ya tengas una clave.

Enter file in which to save the key (/Users/yourname/.ssh/id_rsa):

A continuación se te pedirá una contraseña (passphrase) , ésta será requerida para usar la clave privada, es buena idea usar una contraseña para tu clave privada, aunque también podrías dejarla en blanco.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Una vez que hayas introducido tu contraseña, tu par de claves se generarán:

Your identification has been saved in /Users/yourname/.ssh/id_rsa.
Your public key has been saved in /Users/yourname/.ssh/id_rsa.pub.

También verás una huella digital y una huella digital visual, no es necesario guardarlos.

The key fingerprint is:
d7:21:c7:d6:b8:3a:29:29:11:ae:6f:79:bc:67:63:53 yourname@laptop1
The key's randomart image is:
+--[ RSA 2048]----+
| |
| . o |
| . . * . |
| . . = o |
| o S . o |
| . . o oE |
| . .oo +. |
| .o.o.*. |
| ….= o |
+-----------------+

2.- Configura un usuario SSH/SFTP para la clave

Método 1.- Usando ssh-copy-id

Ahora que tiene un par de claves SSH, estás listo para configurar el usuario del sistema para que pueda usar SSH o SFTP con su clave privada.

Para copiar tu clave privada al servidor, ejecuta el siguiente comando, reemplazando por el nombre de usuario y dirección IP adecuados:

ssh-copy-id SYSUSER@x.x.x.x

Método 2.- Configuración manual

Si no tienes el comando ssh-copy-id (por ejemplo, si eres un usuario Windows) , deberás crear de manera manual el archivo .ssh/authorized_keys para que contenga tu clave pública.

Si generaste tu par de claves en el servidor (Paso 1), ya tienes la carpeta .ssh, ahora deberás crear el archivo authorized_keys con los permisos adecuados, para ello, introduce el siguiente comando en el servidor:

$ sudo umask 077 && touch /home/username/.ssh/authorized_keys

Ahora, edita el archivo .ssh/authorized_keys

$ sudo nano /home/username/.ssh/authorized_keys

Copia y pega el contenido del archivo id_rsa.pub en el archivo authorized_keys. Quedará algo así:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSkT3A1j89RT/540ghIMHXIVwNlAEM3WtmqVG7YN/wYwtsJ8iCszg4/lXQsfLFxYmEVe8L9atgtMGCi5QdYPl4X/c+5YxFfm88Yjfx+2xEgUdOr864eaI22yaNMQ0AlyilmK+PcSyxKP4dzkf6B5Nsw8lhfB5n9F5md6GHLLjOGuBbHYlesKJKnt2cMzzS90BdRk73qW6wJ+MCUWo+cyBFZVGOzrjJGEcHewOCbVs+IJWBFSi6w1enbKGc+RY9KrnzeDKWWqzYnNofiHGVFAuMxrmZOasqlTIKiC2UK3RmLxZicWiQmPnpnjJRo7pL0oYM9r/sIWzD6i2S9szDy6aZ mike@laptop1

3.- Permitir acceso solo con claves SSH

Una vez que hemos copiado la clave pública del cliente en la ubicación correcta, le indicaremos al servidor que sólo permitiremos acceder con certificados

$ sudo nano /etc/ssh/sshd_config

#Desactivar la autenticación con contraseña
PasswordAuthentication no

#Indicamos usuarios que se podrán autenticar 
AllowUsers usuarioSSH

#Indicamos que active la autenticación con clave pública
PubkeyAuthentication yes

Reiniciamos el servicio ssh:

$ sudo systemctl restart sshd

4.- Probar la conexión

Para probar el funcionamiento de nuestra configuración, desde el cliente deberemos introducir la siguiente instrucción, reemplazando los parámetros correspondientes, como, número de puerto, nombre de usuario, ip del servidor.

$ ssh -p 2244 usuarioSSH@192.168.1.20

Se nos pedirá el password (passphrase) que introducimos al generar el par de claves

Enter passphrase for key '/home/username/.ssh/id_rsa':

Una vez que hayamos introducido el password, se establece la conexión y se nos muestra información relacionada, como fecha, hora y origen.

En caso de haber guardado las claves públicas en un directorio distinto (como el caso de usuarios windows), necesitamos especificar el archivo a utilizar, con -i

$ ssh -p 2244 -i archivo usuarioSSH@192.168.1.20

Consideraciones adicionales

Otorgando acceso a múltiples claves

El archivo .ssh/authorized_keys que creamos antes, tiene un formato muy simple, puede contener muchas claves. Solo es necesario tener una clave por cada línea en el archivo.

Si tienes múltiples claves (por ejemplo, una en cada laptop) o múltiples desarrolladores a los que necesitas otorgar acceso, solo sigue las instrucciones de arriba o edita manualmente el archivo para pegar claves adicionales.

Cuando esté listo, el archivo .ssh/authorized_keys lucirá algo así: (usando tus propias claves públicas)

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSkT3A1j89RT/540ghIMHXIVwNlAEM3WtmqVG7YN/wYwtsJ8iCszg4/lXQsfLFxYmEVe8L9atgtMGCi5QdYPl4X/c+5YxFfm88Yjfx+2xEgUdOr864eaI22yaNMQ0AlyilmK+PcSyxKP4dzkf6B5Nsw8lhfB5n9F5md6GHLLjOGuBbHYlesKJKnt2cMzzS90BdRk73qW6wJ+MCUWo+cyBFZVGOzrjJGEcHewOCbVs+IJWBFSi6w1enbKGc+RY9KrnzeDKWWqzYnNofiHGVFAuMxrmZOasqlTIKiC2UK3RmLxZicWiQmPnpnjJRo7pL0oYM9r/sIWzD6i2S9szDy6aZ mike@laptop1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzlL9Wo8ywEFXSvMJ8FYmxP6HHHMDTyYAWwM3AOtsc96DcYVQIJ5VsydZf5/4NWuq55MqnzdnGB2IfjQvOrW4JEn0cI5UFTvAG4PkfYZb00Hbvwho8JsSAwChvWU6IuhgiiUBofKSMMifKg+pEJ0dLjks2GUcfxeBwbNnAgxsBvY6BCXRfezIddPlqyfWfnftqnafIFvuiRFB1DeeBr24kik/550MaieQpJ848+MgIeVCjko4NPPLssJ/1jhGEHOTlGJpWKGDqQK+QBaOQZh7JB7ehTK+pwIFHbUaeAkr66iVYJuC05iA7ot9FZX8XGkxgmhlnaFHNf0l8ynosanqt henry@laptop2

Corrigiendo permisos en el directorio .ssh

Anteriormente se mostró la forma adecuada de crear el directorio .ssh y el archivo authorized_keys, pero si por alguna razón los creaste de otra forma (por ejemplo, el administrador del sistema podría haber creado una clave e instalarla en el servidor), y necesitas corregir los permisos, deberás ejecutar las siguientes instrucciones

$ sudo chmod 700 /home/username/.ssh

$ sudo chmod 600 /home/username/.ssh/authorized_keys

Ejecutar SSH en modo debug

Si en algún punto no logras establecer conexión, será conveniente revisar de donde se origina el problema, para ello, puedes ejecutar el modo debug con -v

$ ssh -p 2244 -i archivo usuarioSSH@192.168.1.20

Esto, te mostrará la forma en que se establece la conexión y te permitirá identificar el problema más facilmente.

Ubicación del archivo authorized_keys

Con OpenSSH, las claves autorizadas se configuran de forma predeterminada en .ssh/authorized_keys en el directorio de inicio del usuario.

La directiva authorized_keys en el archivo /etc/ssh/sshd_config especifica donde busca el servidor SSH las claves autorizadas.

#The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
#but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile   .ssh/authorized_keys

Ubicación del certificado o clave de identidad

Las claves de identidad, generalmente se almacenan en el directorio .ssh del usuario, por ejemplo, en .ssh/id_rsa. El nombre del archivo predeterminado comienza con id_<algoritmo>. Es posible especificar cualquier nombre de archivo y ubicación al momento de crear la clave privada; sin embargo, debemos tener en cuenta que necesitaremos proporcionar el nombre de la ruta con la opción -i al momento de establecer la conexión.

Configuraciones adicionales

Es posible realizar configuraciones adicionales, como el numero máximo de sesiones y número máximo de intentos, entre otras.

Para eso, tendrás que editar las directivas MaxSessions y MaxAuthTries en el archivo /etc/ssh/sshd_config,

Consulta de registros

Con el fin de tener el máximo control de los servidores conviene saber dónde se encuentran los archivos de registros o logs. Para el caso del servidor SSH, los archivos se encuentran en el directorio /var/log

  • /var/log/messages y
  • /var/log/secure.

Referencias externas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *