Como parte del proceso de protección de tu VPS (consulta el artículo «Cómo proteger un VPS con sistema operativo Ubuntu Linux»), el acceso SSH mediante nombre de usuario y contraseña puede ser un punto crítico para la seguridad. Por lo general se tiende a utilizar contraseñas fáciles de memorizar (aunque contengan caracteres especiales, por ejemplo Ci@oM0nd0): esto puede exponerte a intentos de acceso por parte de usuarios malintencionados — de hecho, utilizando la técnica del brute force es posible dar con tu contraseña.
Esta técnica de ataque consiste básicamente en intentar acceder al servidor utilizando una base de datos de contraseñas conocidas hasta dar con la correcta. Si has seguido la guía indicada al principio de este artículo, ya has configurado un usuario sin privilegios que puede utilizar sudo y has instalado Fail2ban para mantener a raya los intentos de acceso no deseados. Con los próximos pasos aumentaremos aún más la seguridad del VPS.
Requisitos previos
- Un VPS con sistema operativo Linux
- Un usuario con privilegios adecuados, es decir, sudo (en este ejemplo se llama utente_vps)
- Tu ordenador debe utilizar macOS o cualquier distribución basada en Linux
- La aplicación ssh-keygen, normalmente presente en Linux y macOS
- La aplicación ssh-copy-id, normalmente presente en Linux y macOS
En esta guía veremos cómo crear el par de claves SSH utilizando ssh-keygen, que forma parte de OpenSSH.
Cómo funciona el acceso mediante claves SSH
Antes de empezar, repasemos brevemente su funcionamiento. Un par de claves SSH está formado, precisamente, por dos claves criptográficas, una pública y una privada, que se utilizan para autenticar a un cliente en un servidor SSH. La clave privada la conserva el cliente y debe mantenerse a buen recaudo y no divulgarse: si se ve comprometida, se pierde o es robada, permitirá acceder al servidor a quien la posea. La clave pública correspondiente puede compartirse sin consecuencia alguna, además de cargarse normalmente en el servidor al que se quiere acceder. Esta última, de hecho, se utiliza para cifrar los «mensajes» que solo la clave privada puede descifrar.
En una configuración estándar, la clave pública se añade al archivo authorized_keys presente en la carpeta ~/.ssh/ de cada usuario habilitado. Cuando un cliente intenta conectarse por SSH al servidor, el servicio comprueba si el usuario posee la clave privada: si el resultado es positivo, se le concederá el acceso.
Paso 1 — Creación de las claves con ssh-keygen
- Abre la aplicación Terminal
- Escribe el comando:
o bien, si estás en Linux:$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/tuo_utente_macos/.ssh/id_rsa):
Te preguntará dónde guardar el par de claves: puedes dejar la ruta que te propone o elegir la que prefieras. En caso de que ya exista un par de claves, aparecerá el mensaje:Enter file in which to save the key (/home/tuo_utente_linux/.ssh/id_rsa):
En ese caso te toca decidir si sobrescribirlas o interrumpir el procedimiento y repetirlo cambiando la ruta de guardado de las nuevas claves./Users/tuo_utente_macos/.ssh/id_rsa already exists. Overwrite (y/n)? - Para mayor seguridad puedes especificar también una passphrase, que deberás introducir cada vez que uses las claves. Tú decides: si pulsas INTRO sin escribir nada, no necesitarás ninguna contraseña.
Llegados a este punto hemos creado el par de claves, guardado en la ruta indicada al principio del procedimiento (normalmente el directorio oculto .ssh dentro de tu perfil de usuario): en el ejemplo puedes encontrarlas en /Users/tuo_utente_macos/.ssh/ o /home/tuo_utente_linux/.ssh/. Dentro de la carpeta encontrarás dos archivos, id_rsa y id_rsa.pub: como sugiere su nombre, id_rsa.pub es la clave pública, que deberá cargarse en tu VPS, mientras que id_rsa es la clave privada y no debe compartirse bajo ningún concepto.
Paso 2 — Copiamos la clave al VPS
Procedamos a copiar la clave pública al VPS. En este caso nos echa una mano el comando ssh-copy-id: desde la aplicación Terminal de tu macOS o Linux, escribe:
$ ssh-copy-id Nome_Utente@IPv4_del_VPS
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/tuo_utente_macos/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Nome_Utente@IPv4_del_VPS's password:
En cualquier caso, debes introducir la contraseña de tu usuario en el VPS para confirmar la copia.
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'Nome_Utente@IPv4_del_VPS'"
and check to make sure that only the key(s) you wanted were added.
Si todo se ha hecho correctamente, al conectarte ahora por SSH al VPS con el usuario sin privilegios accederás directamente a la consola remota sin que se te pida la contraseña — salvo que hayas establecido la passphrase al crear las claves: en ese caso no usarás la contraseña de tu usuario en el VPS, sino la passphrase que hayas decidido establecer.
Conclusiones
A partir de ahora podrás acceder a tu VPS con una pizca más de seguridad. Hay una medida adicional que puedes poner en práctica: ahora que las claves funcionan, puedes deshabilitar por completo el acceso con contraseña al servicio SSH.
Guía publicada originalmente en el blog de VPS GREEN, el servicio VPS en nuestro cloud privado green.