# Claves SSH

La conexión remota al servidor siempre requiere la autenticación del cliente para que terceros no autorizados no puedan acceder. El método básico de autenticación es el uso de una contraseña. Pero las contraseñas tienen una desventaja: pueden ser descifradas, especialmente si el propietario del servidor no se preocupó por la complejidad de la contraseña.

Para conexiones SSH a servidores Linux, se recomienda un método alternativo: la autenticación mediante claves SSH. Estas claves son un par: una clave privada y una clave pública. La clave privada debe almacenarse, respectivamente, en el entorno privado del cliente, y la clave pública se envía al servidor y se coloca en el `authorized_keys` archivo.

{% hint style="info" %}
Este método de autenticación no es aplicable a servidores Windows, ya que la conexión RDP carece de dicha funcionalidad.
{% endhint %}

El uso de claves SSH no es un requisito del sistema de la plataforma Navixy, pero se recomienda encarecidamente a los propietarios de servidores por razones de seguridad.

{% hint style="danger" %}
No comparta claves privadas con nadie en quien no confíe. Si necesita dar acceso a su servidor a un tercero, no es necesario compartir su propia clave. En su lugar, puede solicitar su clave pública y añadirla temporalmente a su servidor, luego eliminarla una vez terminado el trabajo.
{% endhint %}

## Creación de claves SSH en Linux

Si su estación de trabajo utiliza un sistema operativo basado en Linux, entonces necesita usar el paquete **openssh** . Puede estar preinstalado o requerir instalación adicional. En Ubuntu y Debian se instala con este comando:

```
apt -y install openssh-server
```

Para otras distribuciones, el comando puede ser diferente.

Para comenzar a generar claves, ejecute este comando:

```
ssh-keygen
```

Se le pedirá que introduzca la ruta del archivo donde se colocarán las claves. Puede dejar la ubicación predeterminada (entre paréntesis) pulsando Enter, o especificar una ubicación y nombre de archivo personalizados.

A continuación, se le pedirá que introduzca una frase de contraseña. Es una medida de seguridad adicional para proteger su clave frente al uso por terceros en caso de que se vea comprometida. Este paso es opcional.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-999255a7ab863755c74e1fa67b7ab8c1f9d9a214%2Fimage-20240214-122034.png?alt=media)

Una vez que haya generado correctamente un par de claves, verá una notificación:

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-0fd25c419623fbc908e70ae2e754e97971bfc384%2Fimage-20240214-122134.png?alt=media)

Con la ubicación predeterminada, la clave pública se almacena en `/root/.ssh/id_rsa.pub`, y la clave privada se almacena en `/root/.ssh/id_rsa`.

Ahora necesita copiar la clave pública a su servidor, en el directorio del usuario en cuyo nombre se realizará la conexión remota. Supongamos que el nombre de usuario es `navixy`. Conéctese a su servidor y edite el archivo con cualquier editor de texto, por ejemplo:

```
vi /home/navixy/.ssh/authorized_keys
```

Especifique el contenido de su clave pública después de `ssh-rsa`. Puede añadir un comentario breve después de la clave para explicar su propósito.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-2bb417eb5c4443182ad4568056c666651afbb053%2Fimage-20240214-124130.png?alt=media)

Guarde el archivo.

Ahora puede conectarse al servidor usando la clave SSH recién creada.

```
ssh -i id_rsa navixy@myserver.domain.com
```

Después de esto, puede desactivar la autenticación por contraseña en su servidor.

## Creación de claves SSH en Windows

Si utiliza Windows, el cliente más común para conectarse a un servidor vía SSH es **PuTTY**. También existen muchos clientes alternativos, pero todos cumplen básicamente la misma función, por lo que la elección es suya.

En Windows, la generación de claves SSH se realiza con la utilidad **PuTTYgen** que viene con el paquete de instalación de PuTTY.

Inicie PuTTYgen desde el menú de inicio.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-477e3c425ac5416d65fb92056a864f049ebe8a58%2Fimage-20240215-124950.png?alt=media)

Asegúrese de que el tipo de clave `RSA` esté seleccionado y haga clic en **Generate**.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-6aac962f348f5cb33771049a00381675f082cd24%2Fimage-20240215-125643.png?alt=media)

Durante el proceso de generación de claves, deslice el ratón varias veces sobre la ventana de la aplicación para crear valores aleatorios.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-dfb47ef4fd49eaba7dad09bcce5e5e794ffcd3b2%2Fimage-20240215-125204.png?alt=media)

Tras completar la creación de la clave, la clave pública se mostrará en PuTTYgen y la clave privada se almacenará en la memoria de la aplicación. Para guardar estas claves, haga clic en **Save public key** y **Save private key**. Especifique el directorio en su PC para almacenar los archivos de clave.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-a2310c827687797ae57c7e94b22fd9f2de9b4231%2Fimage-20240215-133332.png?alt=media)

Al guardar la clave privada, si el campo `Key passphrase` no está rellenado, se le preguntará "¿Está seguro de que quiere guardar esta clave sin una frase de contraseña para protegerla?". Haga clic en `Sí` o vuelva a la ventana anterior para especificar la frase de contraseña.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-5e63b402b4fc3cf8843a476597260cc3a2ca721f%2Fimage-20240215-133546.png?alt=media)

Ahora la clave pública debe ser copiada a su servidor en el `authorized_keys` archivo. Se encuentra en el directorio del usuario en cuyo nombre se realizará la conexión remota. Supongamos que el nombre de usuario es `navixy`, y en este caso la ubicación del archivo será `/home/navixy/.ssh/authorized_keys`.

Use cualquier cliente de transferencia de archivos para trabajar con archivos en un servidor Linux remoto. Aquí explicaremos el proceso usando **WinSCP** como el cliente más popular.

Abra el archivo `authorized_keys` via WinSCP para editarlo.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-1bcdd4f34b03a4026334ed4a5623f59c81065f63%2Fimage-20240215-140635.png?alt=media)

Copie el valor de la clave pública desde la ventana de PuTTYgen o desde el archivo guardado previamente. La clave debe comenzar con `ssh-rsa`. Si ya hay alguna clave guardada en el archivo `authorized_keys` , añada la nueva clave después de ella, comenzando en una nueva línea.

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-871f245b4f4ce9a9abf3073b89a6bee210f6bdf3%2Fimage-20240215-141101.png?alt=media)

Guarde el archivo.

Ahora puede conectarse a su servidor vía PuTTY usando el archivo de clave privada. Debe especificar la ruta al mismo en su PC. Para ello, seleccione la ruta requerida en *Connection - SSH - Auth - Credentials* sección (nueva versión de PuTTY) o *Connection - SSH - Auth* (versión anterior), en el campo *Private key for authentication* .

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-3fb7ba5b02297fd1c989ead8c019ab43df536957%2Fimage-20240215-143917.png?alt=media)

Especifique el nombre de usuario y la dirección del servidor (p. ej. `navixy@myserver.domain.com`) en la pestaña *Session* y conéctese a su servidor. Si todo se ha hecho correctamente, la conexión se establecerá sin necesidad de introducir una contraseña.

## Claves SSH en soluciones en la nube

Cuando despliega una máquina virtual en servicios en la nube como AWS, MS Azure y similares, puede emitir una clave SSH en el momento de crear la máquina, o añadir una clave existente si ya se creó previamente. Cuando hace esto, el servicio en la nube insertará automáticamente la clave pública en el `authorzed_keys` del usuario del servidor. Todo lo que necesita hacer después de que el servidor se haya desplegado es realizar una conexión SSH usando la clave privada.

{% hint style="info" %}
Aunque las plataformas en la nube le permiten crear claves SSH, no almacenan la parte privada en su lado. Una vez descargada, la clave privada debe guardarse de forma segura, porque en caso de pérdida el acceso al servidor será imposible.
{% endhint %}

## Desactivación de la autenticación por contraseña

Una vez que haya configurado correctamente la autenticación por claves, no necesita mantener la autenticación por contraseña. Por razones de seguridad, puede desactivarla.

Conéctese al servidor vía SSH y abra el archivo `sshd_config` para editarlo, p. ej. con el editor Vi:

```
vi /etc/ssh/sshd_config
```

Busque el parámetro `PasswordAuthentication` en el archivo y configúrelo en `no`:

```
PasswordAuthentication no
```

Guarde el archivo. Reinicie el servicio sshd:

```
systemctl restart sshd
```

Ahora solo podrá establecer la conexión remota a su servidor vía SSH usando la clave SSH añadida previamente. La autenticación por contraseña está desactivada.
