Una contraseña se puede adivinar, pero una clave SSH no. Por eso la medida de protección más útil para un servidor es entrar con clave y prohibir por completo el acceso con contraseña. Así, los bots que prueban contraseñas día y noche simplemente se toparán con una puerta cerrada.
Esto es lo que haremos, paso a paso.
- crearemos un usuario aparte en lugar de root;
- generaremos una clave SSH en tu ordenador;
- copiaremos la clave al servidor;
- comprobaremos el acceso con la clave;
- desactivaremos el acceso con contraseña y como root.
Qué necesitas
Para empezar, necesitas acceso al servidor por SSH como root. La dirección IP y la contraseña vienen en el correo que recibes tras el pedido y en la sección «Instructions» del área de cliente. Dónde encontrarla te lo enseñamos en el artículo sobre cómo contratar un VPS.
1. Crea un usuario aparte
Los comandos se ejecutan en el servidor, como root.
Trabajar como root a diario no es seguro, porque un solo error o una contraseña robada dan a un atacante acceso total. Por eso crearemos un usuario normal y le daremos permiso para ejecutar comandos de administrador con sudo.
# Creamos el usuario admin (puedes elegir cualquier nombre)
# El comando te pedirá una contraseña, el resto de preguntas puedes
# saltártelas con la tecla Enter
adduser admin
# Añadimos el usuario al grupo sudo para que pueda ejecutar
# comandos de administrador
usermod -aG sudo admin# Creamos el usuario admin (puedes elegir cualquier nombre)
adduser admin
# Le ponemos una contraseña
passwd admin
# En estos sistemas los administradores pertenecen al grupo wheel
usermod -aG wheel adminLa contraseña del usuario todavía te hará falta, porque te la pedirá sudo. Pero para entrar en el servidor pronto dejará de ser necesaria.
2. Crea una clave SSH en tu ordenador
Este comando se ejecuta en tu propio ordenador. En Windows abre PowerShell, y en macOS y Linux, el Terminal.
# Creamos una clave de tipo ed25519, una opción moderna y segura
ssh-keygen -t ed25519 -a 64El programa te hará un par de preguntas.
- dónde guardar la clave – solo pulsa Enter;
- passphrase – la contraseña de la propia clave. Mejor ponerla, porque así nadie podrá usar un archivo de clave robado sin esa contraseña.
Al final aparecerán dos archivos en la carpeta .ssh de tu usuario.
id_ed25519– la clave privada, que se queda solo contigo;id_ed25519.pub– la clave pública, que pondremos en el servidor.
No compartas nunca la clave privada
El archivo id_ed25519 es tu clave privada. No la envíes por mensajería, no la subas a la nube y no la pongas en el servidor.
Lo único que sale de tu ordenador es el archivo que termina en .pub.
3. Copia la clave al servidor
El comando se ejecuta en tu ordenador. En lugar de SERVER_IP, pon la dirección IP del servidor.
# Copiamos la clave pública al servidor para el usuario admin
ssh-copy-id admin@SERVER_IP# En Windows no existe el comando ssh-copy-id, así que pasamos la clave
# en una sola línea.
# Crea en el servidor la carpeta .ssh, añade la clave a
# authorized_keys y pone los permisos correctos
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh admin@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"El comando te pedirá la contraseña del usuario admin. Es la última vez que la necesitas para entrar.
4. Comprueba el acceso con la clave
Conéctate desde tu ordenador en una nueva ventana del terminal.
# Nos conectamos con el nuevo usuario. No debería pedirse
# la contraseña del servidor,
# como mucho la passphrase de la clave, si la pusiste
ssh admin@SERVER_IP
# Ya en el servidor, comprobamos que sudo funciona. El comando debe
# mostrar root
sudo whoamiSi te conectas con Termius, añade la clave en su configuración e indica el usuario admin. Cómo conectarse con Termius lo explicamos en un artículo aparte.
5. Desactiva el acceso con contraseña y como root
No cierres la conexión anterior
Hasta que no compruebes que el acceso con clave funciona en una ventana nueva, mantén abierta la sesión anterior. Si algo sale mal, a través de ella podrás deshacerlo todo fácilmente.
En Ubuntu y Debian, la configuración de SSH se lee a la vez de varios archivos de la carpeta /etc/ssh/sshd_config.d/, y gana el ajuste que aparece primero. Por ejemplo, el archivo 50-cloud-init.conf puede permitir el acceso con contraseña, y entonces tu prohibición en otro archivo simplemente no funcionará. Por eso crearemos nuestro propio archivo con el número 00, así el servidor lo leerá antes que los demás.
A partir de aquí, los comandos se ejecutan en el servidor.
# Creamos el archivo con nuestra configuración de SSH y lo abrimos en
# el editor nano
sudo nano /etc/ssh/sshd_config.d/00-security.confPega estas líneas en el archivo.
# Prohibimos el acceso directo como root
PermitRootLogin no
# Prohibimos el acceso con contraseña
PasswordAuthentication no
# Dejamos activado el acceso con claves
PubkeyAuthentication yesPara guardar el archivo, pulsa Ctrl + O y Enter, y para salir del editor, Ctrl + X.
Ahora comprobamos la configuración y la aplicamos.
# Buscamos errores en la configuración. Si el comando no muestra nada,
# todo está bien
sudo sshd -t
# Vemos qué ajustes se aplican de verdad
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication"En la respuesta deben aparecer permitrootlogin no y passwordauthentication no. Si ves otro valor, es que otro archivo lo está sobrescribiendo. Revisa el contenido de la carpeta con el comando ls /etc/ssh/sshd_config.d/.
Solo queda reiniciar SSH.
# Reiniciamos SSH para que se aplique la nueva configuración
sudo systemctl restart ssh# Reiniciamos SSH para que se aplique la nueva configuración
sudo systemctl restart sshd6. Comprobación final
Abre otra ventana del terminal y comprueba los dos casos.
# El acceso como admin con la clave debe funcionar
ssh admin@SERVER_IP
# Y el acceso como root ahora debe terminar con el error Permission
# denied
ssh root@SERVER_IPSi todo es así, enhorabuena, ya nadie puede adivinar la contraseña de tu servidor. Ya puedes cerrar la sesión anterior.
Si aun así pierdes el acceso
Si aun así pierdes el acceso, abre el servidor con el botón Console de la lista de servidores del área de cliente. Así el servidor se abre directamente en el navegador, sin SSH, y puedes deshacer los cambios borrando el archivo /etc/ssh/sshd_config.d/00-security.conf.
Nuestros recursos
Canal de Telegram: https://t.me/f3cloud_news
Web del hosting: https://f3cloud.com