> La lista completa de artículos está en [llms.txt](https://docs.f3cloud.com/llms.txt). Cada página tiene versión en Markdown, basta con añadir .md a su dirección. Esta página en Markdown: [https://docs.f3cloud.com/es/client-area/protect-vps-from-unauthorised-access/ssh-keys.md](https://docs.f3cloud.com/es/client-area/protect-vps-from-unauthorised-access/ssh-keys.md).

# Cómo entrar por clave SSH y desactivar el acceso con contraseña en Linux

Cómo configurar el acceso al servidor con una clave SSH, crear un usuario aparte con sudo y desactivar el acceso con contraseña y como root. Comandos para Ubuntu, Debian, AlmaLinux, CentOS y Oracle Linux.

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.

1. crearemos un usuario aparte en lugar de root;
2. generaremos una clave SSH en tu ordenador;
3. copiaremos la clave al servidor;
4. comprobaremos el acceso con la clave;
5. 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](https://docs.f3cloud.com/es/client-area/order-vps.md#access).

***

### 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`.

#### Ubuntu y Debian

```bash
# 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
```
#### AlmaLinux, CentOS, Oracle Linux

```bash
# 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 admin
```

La 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.

```bash
# Creamos una clave de tipo ed25519, una opción moderna y segura
ssh-keygen -t ed25519 -a 64
```

El programa te hará un par de preguntas.

* **dónde guardar la clave** – solo pulsa <kbd>Enter</kbd>;
* **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.

#### macOS y Linux

```bash
# Copiamos la clave pública al servidor para el usuario admin
ssh-copy-id admin@SERVER_IP
```
#### Windows (PowerShell)

```powershell
# 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.

```bash
# 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 whoami
```

Si 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](https://docs.f3cloud.com/es/vps/termius-connection.md).

***

### 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.

```bash
# 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.conf
```

Pega estas líneas en el archivo.

```ssh-config
# Prohibimos el acceso directo como root
PermitRootLogin no
# Prohibimos el acceso con contraseña
PasswordAuthentication no
# Dejamos activado el acceso con claves
PubkeyAuthentication yes
```

Para guardar el archivo, pulsa <kbd>Ctrl</kbd> + <kbd>O</kbd> y <kbd>Enter</kbd>, y para salir del editor, <kbd>Ctrl</kbd> + <kbd>X</kbd>.

Ahora comprobamos la configuración y la aplicamos.

```bash
# 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.

#### Ubuntu y Debian

```bash
# Reiniciamos SSH para que se aplique la nueva configuración
sudo systemctl restart ssh
```
#### AlmaLinux, CentOS, Oracle Linux

```bash
# Reiniciamos SSH para que se aplique la nueva configuración
sudo systemctl restart sshd
```

***

### 6. Comprobación final

Abre otra ventana del terminal y comprueba los dos casos.

```bash
# 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_IP
```

Si 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 <kbd>Console</kbd> 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](https://t.me/f3cloud_news)\
**Web del hosting:** [https://f3cloud.com](https://f3cloud.com/es)
