Salta al contenuto principale
Lympha technologies

Guide pratiche

Acceder de forma segura a un VPS por SSH desde Linux o macOS

Acceso SSH seguro a un VPS desde Linux o macOS: cómo funciona la autenticación con claves (pública y privada), la generación con ssh-keygen, la copia al servidor con ssh-copy-id y la passphrase opcional — con la salida real de cada paso.

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

  1. Un VPS con sistema operativo Linux
  2. Un usuario con privilegios adecuados, es decir, sudo (en este ejemplo se llama utente_vps)
  3. Tu ordenador debe utilizar macOS o cualquier distribución basada en Linux
  4. La aplicación ssh-keygen, normalmente presente en Linux y macOS
  5. 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

  1. Abre la aplicación Terminal
  2. Escribe el comando:
    $ 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):
    o bien, si estás en Linux:
    Enter file in which to save the key (/home/tuo_utente_linux/.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:
    /Users/tuo_utente_macos/.ssh/id_rsa already exists.
    Overwrite (y/n)?
    En ese caso te toca decidir si sobrescribirlas o interrumpir el procedimiento y repetirlo cambiando la ruta de guardado de las nuevas claves.
  3. 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.

Comparte este artículo

LinkedIn X Email

Redacción Lympha

Los artículos de este blog nacen de la experiencia de campo de nuestras Business Units y Centros de competencia: quien escribe es quien diseña, gestiona y da soporte cada día a los sistemas de los que hablamos. Los contenidos tienen carácter informativo y reflejan el estado del arte en la fecha de publicación.

También te puede interesar