El primer paso para configurar las claves SSH es crear un par de claves en la máquina cliente (generalmente en una computadora):
$ ssh-keygen
Para empezar, ssh-keygen creará un par de claves RSA de 2048 bits, esto será lo suficientemente seguro para la mayoría de los casos de uso.
Como alternativa, puede pasar opcionalmente el indicador -b 4096 para crear una clave más grande de 4096 bits.
Después de ingresar el comando, debería poder ver el siguiente mensaje:
Output Enter file in which to save the key (/your_home/.ssh/id_rsa):
Presione Enter para guardar el par de claves en el subdirectorio .ssh/ de su directorio de inicio o en una ruta alternativa personalizada. Debería aparecer el siguiente mensaje:
Output Enter passphrase ( leave empty for no passphrase):
Opcionalmente, puede introducir una contraseña segura, lo cual es muy recomendable. Una contraseña añade una capa adicional de seguridad para evitar que usuarios no autorizados inicien sesión. Para obtener más información sobre seguridad, consulte nuestro tutorial sobre cómo configurar la autenticación basada en claves SSH en un servidor Linux.
Deberías ver entonces el siguiente resultado:Output Your 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 debería tener una clave pública y una privada que pueda usar para autenticarse. El siguiente paso es guardar la clave pública en su servidor para poder usar la autenticación basada en clave SSH para iniciar sesión.
La forma más rápida de copiar su clave pública al host de Ubuntu es usar la utilidad ssh-copy-id. Este método es muy recomendable si está disponible. Si no tiene ssh-copy-id disponible en su equipo cliente, puede usar uno de los dos métodos alternativos que se proporcionan en esta sección (copiar mediante SSH con contraseña o copiar la clave manualmente).
La herramienta ssh-copy-id está incluida por defecto en muchos sistemas operativos; es posible que la tenga disponible en su sistema local. Para que funcione, necesitará acceso SSH con contraseña a su servidor. Para usar la utilidad, debe especificar el host remoto al que desea conectarse y simplemente agregar la cuenta de usuario con acceso SSH mediante contraseña. Esta será la cuenta a la que se copiará su clave SSH pública.
La sintaxis es:
$ ssh-copy-id username@remote_host
Es posible que vea el siguiente mensaje:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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 reconoció el host remoto. Es probable que esto ocurra la primera vez que se conecta a un nuevo host. Escriba "sí" y presione ENTER para continuar.
A continuación, la utilidad buscará en su cuenta local la clave id_rsa.pub que creamos anteriormente. Al encontrarla, 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 keys username@111.111.11.111's password:
Escriba la contraseña (tenga en cuenta que, por seguridad, no se mostrará lo que escriba) y pulse INTRO. La utilidad se conectará a la cuenta en el host remoto con la contraseña proporcionada. A continuación, copiará el contenido de su clave ~/.ssh/id_rsa.pub a un archivo llamado "authorized_keys" en el directorio de inicio ~/.ssh de la cuenta remota.
Después de esto deberías ver el siguiente resultado:
Output Number of key(s) added: 1 Logging into the machine, with: "ssh 'username@111.111.11.111'" and check to make sure that only the key you wanted was added.
En este punto del proceso, su clave id_rsa.pub se ha cargado en la cuenta remota.
Si no tiene disponible el ssh-copy-id, pero tiene acceso SSH basado en contraseña a una cuenta en su servidor, puede cargar sus claves usando un método SSH convencional.
Podemos hacerlo usando el comando cat para leer el contenido de la clave SSH pública en nuestro equipo local y canalizarlo mediante una conexión SSH al servidor remoto. Por otro lado, podemos asegurarnos de que el directorio ~/.ssh exista en la cuenta que usamos y luego mostrar el contenido canalizado en un archivo llamado "authorized_keys" dentro de este directorio.
Usaremos el símbolo de redirección >> para añadir el contenido en lugar de sobrescribirlo. Esto nos permitirá añadir claves sin destruir las que ya hemos añadido.
El comando completo se ve así:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Es posible que vea el siguiente mensaje:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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 equipo local no reconoce el host remoto. Esto ocurrirá la primera vez que se conecte a un nuevo host. Escriba "sí" y presione ENTER para continuar.
Luego se le solicitará que ingrese la contraseña de la cuenta de usuario remota:
Output username@111.111.11.111's password:
Después de ingresar su contraseña, el contenido de su clave id_rsa.pub se copiará al final del archivo "authorized_keys" de la cuenta del usuario remoto. Continúe con el paso 3 si la operación se realizó correctamente.
Si no tiene acceso SSH basado en contraseña a su servidor, deberá completar el proceso anterior manualmente.
Agregaremos manualmente el contenido de su archivo id_rsa.pub al archivo ~/.ssh/authorized_keys en su máquina remota.
Para mostrar el contenido de su clave id_rsa.pub, escriba lo siguiente en su computadora local:
cat ~/.ssh/id_rsa.pub
Verá el contenido de la clave, que debería verse así:
Output ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle 7Q+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 el método que tenga disponible.
Una vez que tenga acceso a su cuenta en el servidor remoto, asegúrese de que el directorio ~/.ssh exista. El comando creará el directorio si es necesario, o no hará nada si ya existe:
mkdir -p ~/.ssh
Ahora puede crear o modificar el archivo "authorized_keys" dentro de este directorio. Puede agregar el contenido de su archivo "id_rsa.pub" al final del archivo "authorized_keys", creándolo si es necesario, con este comando:
En el siguiente comando, sustituya la cadena de clave pública por la salida del comando cat ~/.ssh/id_rsa.pub que ejecutó en su sistema local. Debe comenzar con ssh-rsa AAAA....
echo public_key_string >> ~/.ssh/authorized_keys
Ahora podemos intentar acceder a nuestro servidor Ubuntu con una autenticación sin contraseña.
Si ha completado uno de los procedimientos anteriores, debería poder iniciar sesión en el host remoto sin la contraseña de la cuenta remota.
El proceso básico es el mismo que la otra vez que lo usamos:
$ ssh username@remote_host
Si es la primera vez que te conectas a este host (si utilizaste el último método mencionado anteriormente), es posible que veas algo como esto:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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
Si esto ocurre, significa que su equipo local no reconoce el host remoto. Escriba "sí" y presione ENTER para continuar.
Si no proporcionó una contraseña para su clave privada, iniciará sesión inmediatamente. Si la proporcionó al crearla, se le solicitará que la ingrese ahora (tenga en cuenta que, por seguridad, sus pulsaciones no se mostrarán en la sesión de terminal). Tras la autenticación, se le 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.
Si pudo iniciar sesión en su cuenta mediante SSH sin contraseña, ha configurado correctamente la autenticación basada en clave SSH. Sin embargo, su mecanismo de autenticación basada 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 tener configurada la autenticación basada en clave SSH para la cuenta root en este servidor o, preferiblemente, para una cuenta no root con privilegios sudo. Este paso bloqueará los inicios de sesión con contraseña, por lo que es crucial garantizar que aún tenga 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 privilegios sudo. A continuación, abra el archivo de configuración del demonio SSH:
sudo nano /etc/ssh/sshd_config
Dentro del archivo, busque la directiva PasswordAuthentication. Esta puede estar comentada. Descomente la línea y establezca el valor en "no". Esto deshabilitará el inicio de sesión por SSH con las contraseñas de las cuentas.
/etc/ssh/sshd_config ... PasswordAuthentication no ...
Guarde y cierre el archivo al terminar. Para ello, presione CTRL + X, luego Y para confirmar el guardado y, finalmente, ENTER para salir de nano. Para implementar estos cambios, necesitamos reiniciar el servicio sshd:
$ 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 esta sesión:
$ ssh username@remote_host
Una vez que haya verificado su servicio SSH, puede cerrar de forma segura todas las sesiones actuales del servidor.
El demonio SSH de su servidor Ubuntu ahora solo responde a claves SSH. La autenticación con contraseña se ha deshabilitado correctamente.
Una vez completado el tutorial, debería tener configurada la autenticación basada en clave SSH en su servidor, lo que le permitirá iniciar sesión sin proporcionar una contraseña de cuenta.