Cómo configurar claves SSH en Ubuntu 18.04

Introducción
SSH, o secure shell, es un protocolo cifrado que se utiliza para administrar y comunicarse con servidores. Cuando trabaje con un servidor Ubuntu, es probable que pase la mayor parte del tiempo en una sesión de terminal conectado 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 proporcionan una forma segura de iniciar sesión en el servidor y se recomiendan para todos los usuarios.
Paso 1: creación del par de claves RSA
El primer paso es crear un par de claves en la máquina cliente (normalmente, su computadora local):
- ssh-keygen
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 la -b 4096
bandera 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 ENTER
para guardar el par de claves en el .ssh/
subdirectorio de su directorio de inicio o especificar una ruta alternativa.
Si ya ha generado 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 se trata de un proceso destructivo que no se puede revertir.
El siguiente mensaje le pedirá que ingrese una contraseña segura:
OutputEnter passphrase (empty for no passphrase):
Aquí tienes la opción de introducir una contraseña segura, lo cual es muy recomendable. Una contraseña añade una capa de seguridad para evitar que usuarios no autorizados inicien sesión. Para obtener más información sobre seguridad, consulta nuestro tutorial sobre Cómo configurar la autenticación basada en claves SSH en un servidor Linux .
En conjunto, el ssh-keygen
comando 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_hostThe key's randomart image is:+--[ RSA 2048]----+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+
Ahora tienes una clave pública y una privada que puedes usar para autenticarte. El siguiente paso es colocar la clave pública en tu servidor para que puedas usar la autenticación basada en clave SSH para iniciar sesión.
Paso 2: Copiar la clave pública al servidor Ubuntu
La forma más rápida de copiar su clave pública al 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-id
una disponible en su máquina cliente, puede usar uno de los dos métodos alternativos que se proporcionan en esta sección (copiar mediante SSH basado en contraseña o copiar la clave manualmente).
Copiar clave pública usandossh-copy-id
La ssh-copy-id
herramienta está incluida por defecto en muchos sistemas operativos, por lo que podrás tenerla disponible en tu sistema local.
Nota: Para que este método funcione, ya debe tener acceso SSH con contraseña a su servidor.
Para utilizar la utilidad, debe especificar el host remoto al que desea conectarse y la cuenta de usuario a la que tiene acceso SSH con contraseña. Esta es la cuenta a la que se copiará su clave SSH pública.
La sintaxis es la siguiente:
- ssh-copy-id username@remote_host
Es posible que reciba 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. Escriba “sí” y presione ENTER
para continuar.
A continuación, la utilidad escaneará su cuenta local en busca de la id_rsa.pub
clave que creó anteriormente. Cuando encuentre la clave, le solicitará 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 keysusername@203.0.113.1's password:
Escriba la contraseña (no se mostrará nada por razones 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.pub
clave en un archivo en el directorio de inicio de la cuenta remota ~/.ssh
llamado authorized_keys
.
Debería recibir el siguiente resultado:
OutputNumber of key(s) added: 1Now 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.pub
clave se ha cargado en la cuenta remota. Puede continuar con el paso 3 .
Copiar clave pública mediante SSH
Si no tiene ssh-copy-id
acceso SSH a una cuenta de su servidor pero tiene una contraseña, puede cargar sus claves mediante un método SSH convencional. Recuerde que esto solo funcionará si tiene acceso SSH a su servidor con contraseña.
Puede hacerlo utilizando el cat
comando para leer el contenido de la clave SSH pública en su computadora local y canalizarla a través de una conexión SSH al servidor remoto.
Por otro lado, puedes asegurarte de que el ~/.ssh
directorio exista y tenga los permisos correctos en la cuenta que estás utilizando.
Luego, puede generar el contenido que transfirió a un archivo llamado authorized_keys
dentro 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"
Es posible que reciba 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. Escriba “sí” y presione ENTER
para continuar.
Después, se le solicitará que ingrese la contraseña de la cuenta de usuario remota:
Outputusername@203.0.113.1's password:
Después de introducir la contraseña, el contenido de la id_rsa.pub
clave se copiará al final del authorized_keys
archivo de la cuenta del usuario remoto. Continúe con el paso 3 si la operación se realizó correctamente.
Copiar la clave pública manualmente
Si no tiene acceso SSH basado en contraseña a su servidor, tendrá que completar el proceso manualmente.
Esta sección describe cómo agregar manualmente el contenido de su id_rsa.pub
archivo al ~/.ssh/authorized_keys
archivo en su máquina remota.
Para mostrar el contenido de su id_rsa.pub
archivo, 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 utilizando cualquier método que tenga disponible.
Una vez que tenga acceso a su cuenta en el servidor remoto, debe asegurarse de que el ~/.ssh
directorio 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_keys
archivo dentro de este directorio. Puede agregar el contenido de su id_rsa.pub
archivo al final del authorized_keys
archivo, creándolo si es necesario. Para este comando, sustituya el public_key_string
con el resultado del cat ~/.ssh/id_rsa.pub
comando que ejecutó en su sistema local. Debe comenzar con ssh-rsa AAAA...
:
- echo public_key_string ~/.ssh/authorized_keys
Por último, asegúrese de que el ~/.ssh
directorio y authorized_keys
el archivo tengan los permisos adecuados:
- chmod -R go= ~/.ssh
Esto elimina de forma recursiva 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 ~/.ssh
directorio pertenezca al usuario y no a root . En este tutorial, nuestro usuario se llamaSammypero debes sustituir el nombre de usuario apropiado en el siguiente comando:
- chown -R sammy:sammy ~/.ssh
Ahora puedes intentar la autenticación sin contraseña con tu servidor Ubuntu.
Paso 3: Autenticación en el servidor Ubuntu mediante claves SSH
Si ha completado 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 utilizó el método manual), es posible que reciba 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 ENTER
para continuar.
Si no proporcionó una contraseña para su clave privada, iniciará sesión inmediatamente. Si proporcionó una contraseña para la clave privada cuando creó la clave, se le solicitará que la ingrese (tenga en cuenta que las teclas que presione no se mostrarán en la sesión de terminal por razones de seguridad). Después de la autenticación, se le debería abrir una nueva sesión de shell con la cuenta configurada en el servidor Ubuntu.
Si la autenticación basada en clave fue exitosa, continúe para aprender cómo proteger aún más su sistema deshabilitando 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 mediante SSH sin contraseña, ha configurado correctamente la autenticación basada en clave SSH para su cuenta. Sin embargo, su mecanismo de autenticación basado en contraseña sigue activo, lo que significa que su servidor sigue expuesto a ataques de fuerza bruta.
Antes de completar los pasos de esta sección, asegúrese de que tiene configurada la autenticación basada en clave SSH para la cuenta raíz en este servidor o, preferiblemente, de que tiene configurada la autenticación basada en clave SSH para una cuenta que no sea raíz en este servidor con sudo
privilegios. Este paso bloqueará los inicios de sesión basados en contraseñas, lo que garantiza que podrá seguir teniendo acceso administrativo.
Una vez que hayas confirmado que tu cuenta remota tiene privilegios administrativos, inicia sesión en tu servidor remoto con claves SSH, ya sea como root o con una cuenta con sudo
privilegios. Luego, abre el archivo de configuración del demonio SSH:
- sudo nano /etc/ssh/sshd_config
Dentro del archivo, busque una directiva llamada PasswordAuthentication
. Puede comentarla con un #
al principio de la línea. Quite el comentario de la línea eliminando el #
, y establezca el valor en no
. Esto deshabilitará su capacidad de 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 pulsando CTRL + X
, luego Y
y ENTER
para salir nano
. Para activar estos cambios, debe reiniciar el sshd
servicio:
- sudo systemctl restart ssh
Como precaución, abra una nueva ventana de terminal y pruebe que el servicio SSH esté funcionando 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 se ha deshabilitado.
Conclusión
Ahora debería tener la autenticación basada en clave SSH configurada en su servidor, lo que le permitirá iniciar sesión sin proporcionar una contraseña de cuenta.
Si desea obtener más información sobre cómo trabajar con SSH, consulte nuestra Guía de conceptos básicos de SSH .
Deja una respuesta