Introducción

SSH, o shell seguro, es un protocolo cifrado que se utiliza para administrar y comunicarse con los servidores. Cuando trabaje con un servidor Ubuntu, es probable que pase la mayor parte de su tiempo en una sesión de terminal conectada a su servidor a través de SSH.

En esta guía, nos centraremos en configurar claves SSH para una instalación de Ubuntu 18.04. Las claves SSH brindan una forma segura de iniciar sesión en su servidor y se recomiendan para todos los usuarios.

Paso 1: Crear el par de claves RSA

El primer paso es crear un par de claves en la máquina cliente (generalmente su computadora local):

ssh-keygen

Copiar

De forma predeterminada ssh-keygen, se creará un par de claves RSA de 2048 bits, que es lo suficientemente seguro para la mayoría de los casos de uso (opcionalmente, puede pasar el -b 4096indicador para crear una clave más grande de 4096 bits).

Después de ingresar el comando, debería recibir el siguiente resultado:

OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Presione ENTERpara guardar el par de claves en el .ssh/subdirectorio de su directorio de inicio o especifique una ruta alternativa.

Si generó previamente un par de claves SSH, es posible que reciba el siguiente mensaje:

Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

Si elige sobrescribir la clave en el disco, ya no podrá autenticarse con la clave anterior. Tenga mucho cuidado al seleccionar sí, ya que este es un proceso destructivo que no se puede revertir.

El siguiente mensaje le pedirá que ingrese una frase de contraseña segura:

OutputEnter passphrase (empty for no passphrase):

Aquí tiene la opción de ingresar una frase de contraseña segura, lo cual es muy recomendable. Una frase de contraseña agrega una capa de seguridad para evitar que usuarios no autorizados inicien sesión.

En conjunto, el ssh-keygencomando devolverá un resultado como el siguiente:

OutputYour identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

Ahora tiene una clave pública y privada que puede usar para autenticarse. El siguiente paso es colocar la clave pública en su servidor para que pueda usar la autenticación basada en clave SSH para iniciar sesión.

##Paso 2: Copiar la clave pública en el servidor Ubuntu

La forma más rápida de copiar su clave pública en el host de Ubuntu es usar una utilidad llamada ssh-copy-id. Debido a su simplicidad, este método es muy recomendable si está disponible. Si no tiene ssh-copy-iddisponible en su máquina cliente, puede usar uno de los dos métodos alternativos proporcionados en esta sección (copiar a través de SSH basado en contraseña o copiar manualmente la clave).

Copia de clave pública usandossh-copy-id

La ssh-copy-idherramienta se incluye de forma predeterminada en muchos sistemas operativos, por lo que puede tenerla disponible en su sistema local.

Nota: Para que este método funcione, ya debe tener acceso SSH basado en contraseña a su servidor.

Para utilizar la utilidad, especifique el host remoto al que desea conectarse y la cuenta de usuario a la que tiene acceso SSH basado en contraseña. Esta es la cuenta a la que se copiará su clave SSH pública.

La sintaxis es la siguiente:

Puede recibir el siguiente mensaje:

ssh-copy-id username@remote_host
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Esto significa que su computadora local no reconoce el host remoto. Esto sucederá la primera vez que se conecte a un nuevo host. Escribe “sí” y presiona ENTERpara continuar.

A continuación, la utilidad escaneará su cuenta local en busca de la id_rsa.pubclave que creó anteriormente. Cuando encuentre la clave, le pedirá la contraseña de la cuenta del usuario remoto:

Output/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
username@203.0.113.1's password:

Escriba la contraseña (no se mostrará nada por motivos de seguridad) y presione ENTER. La utilidad se conectará a la cuenta en el host remoto utilizando la contraseña que proporcionó. Luego copiará el contenido de su ~/.ssh/id_rsa.pubclave en un archivo en el ~/.sshdirectorio de inicio de la cuenta remota llamado authorized_keys.

Debería recibir el siguiente resultado:

OutputNumber of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.

En este punto, su id_rsa.pubclave se ha cargado en la cuenta remota. Puede continuar con el Paso 3.

Copia de clave pública usando SSH

Si no tiene ssh-copy-iddisponible, pero tiene acceso SSH basado en contraseña a una cuenta en su servidor, puede cargar sus claves utilizando un método SSH convencional. Recuerde, esto solo funcionará si tiene acceso SSH basado en contraseña a su servidor.

Puede hacer esto usando el catcomando para leer el contenido de la clave SSH pública en su computadora local y canalizarlo a través de una conexión SSH al servidor remoto.

Por otro lado, puede asegurarse de que el ~/.sshdirectorio exista y tenga los permisos correctos en la cuenta que está utilizando.

Luego puede enviar el contenido que canalizó a un archivo llamado authorized_keysdentro de este directorio. Use el >>símbolo de redirección para agregar el contenido en lugar de sobrescribirlo. Esto le permitirá agregar claves sin destruir las claves agregadas previamente.

El comando completo se muestra de la siguiente manera:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Puede recibir el siguiente mensaje:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Esto significa que su computadora local no reconoce el host remoto. Esto sucederá la primera vez que se conecte a un nuevo host. Escribe “sí” y presiona ENTERpara continuar.

Después, se le pedirá que ingrese la contraseña de la cuenta de usuario remoto:

Outputusername@203.0.113.1's password:

Después de ingresar su contraseña, el contenido de su id_rsa.pubclave se copiará al final del authorized_keysarchivo de la cuenta del usuario remoto. Continúe con el Paso 3 si esto fue exitoso.

Copiar clave pública manualmente

Si no tiene acceso SSH basado en contraseña a su servidor disponible, deberá completar el proceso manualmente.

Esta sección describe cómo agregar manualmente el contenido de su id_rsa.pubarchivo al ~/.ssh/authorized_keysarchivo en su máquina remota.

Para mostrar el contenido de su id_rsa.pubejecución, ejecute el siguiente comando en su computadora local:

cat ~/.ssh/id_rsa.pub

Esto devolverá el contenido de la clave en la salida del comando:

Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Acceda a su host remoto usando cualquier método que tenga disponible.

Una vez que tenga acceso a su cuenta en el servidor remoto, debe asegurarse de que el ~/.sshdirectorio exista. Este comando creará el directorio si es necesario, o no hará nada si ya existe:

mkdir -p ~/.ssh

Ahora puede crear o modificar el authorized_keysarchivo dentro de este directorio. Puede agregar el contenido de su id_rsa.pubarchivo al final del authorized_keysarchivo, creándolo si es necesario. Para este comando, sustituya public_key_stringcon el resultado del cat ~/.ssh/id_rsa.pubcomando que ejecutó en su sistema local. Debe comenzar con ssh-rsa AAAA...:

echo public_key_string >> ~/.ssh/authorized_keys

Finalmente, asegúrese de que el ~/.sshdirectorio y authorized_keysel archivo tengan los permisos adecuados establecidos:

chmod -R go= ~/.ssh

Esto elimina recursivamente todos los permisos de «grupo» y «otros» para el ~/.ssh/directorio.

Si está utilizando la cuenta raíz para configurar claves para una cuenta de usuario, también es importante que el ~/.sshdirectorio pertenezca al usuario y no a la raíz . En este tutorial nuestro usuario se llamasammypero debe sustituir el nombre de usuario apropiado en el siguiente comando:

chown -R sammy:sammy ~/.ssh

Ahora puede intentar la autenticación sin contraseña con su servidor Ubuntu.

Paso 3: Autenticación en el servidor Ubuntu usando claves SSH

Si completó con éxito uno de los procedimientos del Paso 2, debería poder iniciar sesión en el host remoto sin la contraseña de la cuenta remota.

El proceso es el mismo:

ssh username@remote_host

Si es la primera vez que se conecta a este host (si usó el método manual), puede recibir algo como esto:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Esto significa que su computadora local no reconoce el host remoto. Escriba “sí” y luego presione ENTERpara continuar.

Si no proporcionó una frase de contraseña para su clave privada, iniciará sesión de inmediato. Si proporcionó una frase de contraseña para la clave privada cuando creó la clave, se le pedirá que la ingrese (tenga en cuenta que sus pulsaciones de teclas no se mostrarán en la sesión del terminal por seguridad). Después de la autenticación, debería abrirse una nueva sesión de shell con la cuenta configurada en el servidor de Ubuntu.

Si la autenticación basada en claves fue exitosa, continúe para aprender cómo proteger aún más su sistema al deshabilitar la autenticación con contraseña.

Paso 4: Deshabilitar la autenticación de contraseña en su servidor

Si pudo iniciar sesión en su cuenta usando SSH sin una contraseña, ha configurado correctamente la autenticación basada en clave SSH en su cuenta. Sin embargo, su mecanismo de autenticación basado en contraseña aún está activo, lo que significa que su servidor aún está expuesto a ataques de fuerza bruta.

Antes de completar los pasos de esta sección, asegúrese de tener configurada la autenticación basada en clave SSH para la cuenta raíz en este servidor o, preferiblemente, que tenga configurada la autenticación basada en clave SSH para una cuenta no raíz en este servidor. servidor con sudoprivilegios. Este paso bloqueará los inicios de sesión basados ​​en contraseña, por lo que es crucial garantizar que aún pueda obtener acceso administrativo.

Una vez que haya confirmado que su cuenta remota tiene privilegios administrativos, inicie sesión en su servidor remoto con claves SSH, ya sea como root o con una cuenta con sudoprivilegios. Luego, abra el archivo de configuración del demonio SSH:

sudo nano /etc/ssh/sshd_config

Dentro del archivo, busque una directiva llamada PasswordAuthentication. Esto se puede comentar con un #al principio de la línea. Descomente la línea eliminando el #y establezca el valor en no. Esto deshabilitará su capacidad para iniciar sesión a través de SSH usando contraseñas de cuenta:/etc/ssh/sshd_config

...
PasswordAuthentication no
...

Guarde y cierre el archivo cuando haya terminado presionando CTRL + X, luego YENTERpara salir nano. Para activar estos cambios, debe reiniciar el sshdservicio:

sudo systemctl restart ssh

Como precaución, abra una nueva ventana de terminal y pruebe que el servicio SSH funciona correctamente antes de cerrar la sesión actual:

ssh username@remote_host

Una vez que haya verificado que su servicio SSH funciona correctamente, puede cerrar de forma segura todas las sesiones actuales del servidor.

El demonio SSH en su servidor Ubuntu ahora solo responde a la autenticación basada en clave SSH y la autenticación basada en contraseña ha sido deshabilitada.