Esta guía explica qué es la autenticación basada en claves SSH, los tipos de métodos de autenticación SSH y, por último, cómo configurar la autenticación basada en claves SSH en sistemas operativos Linux y similares a Unix.
¿Qué es la autenticación basada en claves SSH?
Como todos sabemos, Secure Shell , en breve SSH , es el protocolo de red criptográfico que le permite comunicarse/acceder de forma segura a un sistema remoto a través de una red no segura, por ejemplo, Internet.
Siempre que envíe datos a través de una red no segura mediante SSH, los datos se cifrarán automáticamente en el sistema de origen y se descifrarán en el lado de destino.
SSH proporciona cuatro métodos de autenticación, a saber, autenticación basada en contraseña , autenticación basada en claves , autenticación basada en host y autenticación de teclado .
Los métodos de autenticación más utilizados son la autenticación basada en contraseña y la autenticación basada en clave.
En la autenticación basada en contraseña, todo lo que necesita es la contraseña del usuario del sistema remoto. Si conoce la contraseña del usuario remoto, puede acceder al sistema respectivo usando "ssh [email protected]" comando.
Por otro lado, en la autenticación basada en claves, debe generar pares de claves SSH y cargar la clave pública SSH en el sistema remoto para comunicarla a través de SSH.
Cada par de claves SSH consta de una clave privada y una clave pública. La clave privada debe mantenerse dentro del sistema del cliente y la clave pública debe cargarse en los sistemas remotos. No debe revelar la clave privada a nadie .
Espero que tenga una idea básica sobre SSH y sus métodos de autenticación. Ahora configuremos la autenticación basada en clave SSH en Linux.
Configurar la autenticación basada en clave SSH en Linux
A los efectos de esta guía, utilizaré el sistema Arch Linux como sistema local y Ubuntu 18.04 LTS como sistema remoto.
Detalles del sistema local:
- SO :Escritorio de Arch Linux
- dirección IP :192.168.225.37 /24
Detalles del sistema remoto:
- SO :Servidor Ubuntu 18.04 LTS
- dirección IP :192.168.225.22/24
Generar par de claves SSH
Como ya se indicó, en el método de autenticación basado en clave SSH, la clave pública debe cargarse en el sistema remoto al que desea acceder a través de SSH.
Las claves públicas generalmente se almacenarán en un archivo llamado ~/.ssh/authorized_keys en los sistemas SSH remotos.
Nota importante: No generar pares de claves como raíz , ya que solo la raíz podría usar esas claves. Cree pares de claves como usuario normal.
Ahora, creemos el par de claves SSH en el sistema local. Para hacerlo, ejecute el siguiente comando en su sistema cliente local.
$ ssh-keygen
El comando anterior creará un par de claves RSA de 2048 bits. Introduzca la frase de contraseña dos veces. Más importante aún, recuerde su frase de contraseña. Lo necesitará más tarde.
Salida de muestra:
Generating public/private rsa key pair. Enter file in which to save the key (/home/sk/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sk/.ssh/id_rsa. Your public key has been saved in /home/sk/.ssh/id_rsa.pub. The key fingerprint is: SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected] The key's randomart image is: +---[RSA 2048]----+ |+=+*= + | |o.o=.* = | |.oo * o + | |. = + . o | |. o + . S | | . E . | | + o | | +.*o+o | | .o*=OO+ | +----[SHA256]-----+
En caso de que ya haya creado el par de claves, verá el siguiente mensaje. Simplemente escriba "y" para sobrescribir la clave existente.
/home/username/.ssh/id_rsa already exists. Overwrite (y/n)?
Tenga en cuenta que la frase de contraseña es opcional . Si proporciona una, se le pedirá que ingrese la contraseña cada vez que intente acceder a un sistema remoto mediante SSH, a menos que esté utilizando un agente SSH para almacenar la contraseña.
Si no desea una frase de contraseña (aunque no es seguro), simplemente presione la tecla ENTER dos veces cuando se le solicite proporcionar la frase de contraseña. Sin embargo, te recomiendo que uses una frase de contraseña.
Usar una clave ssh sin contraseña generalmente no es una buena idea desde el punto de vista de la seguridad. Deben limitarse a casos muy específicos, como servicios que tienen que acceder a un sistema remoto sin la intervención del usuario (por ejemplo, copias de seguridad remotas con rsync, unison, …).
Si ya tiene una clave ssh sin contraseña en un archivo privado ~/.ssh/id_rsa y quería actualizar la clave con la frase de contraseña, use el siguiente comando:
$ ssh-keygen -p -f ~/.ssh/id_rsa
Salida de muestra:
Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
Copiar clave pública SSH a sistemas remotos
Hemos creado el par de claves en el sistema local. Luego, copie la clave pública SSH a su servidor SSH remoto usando el comando:
$ ssh-copy-id [email protected]
Aquí, copiaré la clave pública del sistema local (Arch Linux) al sistema remoto (Ubuntu 18.04 LTS en mi caso).
Técnicamente hablando, el comando anterior copiará el contenido de la clave ~/.ssh/id_rsa.pub del sistema local. en ~/.ssh/authorized_keys del sistema remoto expediente. ¿Claro? Bien.
Escribe sí para continuar conectándose a su servidor SSH remoto y luego ingrese la contraseña sudo (o usuario root) del sistema remoto.
/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 [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.
Si ya copió la clave, pero desea actualizar la clave con una nueva frase de contraseña, use -f opción para sobrescribir la clave existente como se muestra a continuación.
$ ssh-copy-id -f [email protected]
Agregamos con éxito la clave pública SSH del sistema local al sistema remoto.
Ahora podemos deshabilitar completamente la autenticación basada en contraseña en el sistema remoto. Porque ya configuramos la autenticación basada en claves, por lo que ya no necesitamos la autenticación basada en contraseña.
Deshabilitar la autenticación basada en contraseña SSH en el sistema remoto
Debe ejecutar los siguientes comandos como usuario root o sudo.
Para deshabilitar la autenticación basada en contraseña, vaya a la consola de su sistema remoto y edite /etc/ssh/sshd_config archivo de configuración usando cualquier editor:
$ sudo vi /etc/ssh/sshd_config
Encuentra la siguiente línea. Descoméntelo y establezca su valor como no .
PasswordAuthentication no
Reinicie el servicio ssh para aplicar los cambios.
$ sudo systemctl restart sshd
Acceder al sistema remoto desde el sistema local
Vaya a su sistema local y SSH a su servidor remoto usando el comando:
$ ssh [email protected]
Introduzca la frase de contraseña para iniciar sesión en el sistema remoto.
Salida de muestra:
Enter passphrase for key '/home/sk/.ssh/id_rsa': Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37 [email protected]:~$
Como notó, iniciamos sesión en la cuenta del sistema remoto usando la frase de contraseña que creamos anteriormente usando ssh-keygen comando, sin usar la contraseña real de la cuenta de usuario.
Si intenta conectarse desde otro sistema cliente, obtendrá este mensaje de error. Digamos, por ejemplo, traté de SSH en mi sistema Ubuntu desde mi CentOS usando el comando:
$ ssh [email protected]
Salida de muestra:
The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established. ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts. Permission denied (publickey).
Como puede ver en el resultado anterior, no se me permitió acceder a SSH en mis sistemas Ubuntu 18.04 remotos desde otros sistemas.
Agregar más claves del sistema cliente al servidor SSH
Esto es muy importante. Como ya dije, no puede acceder al sistema remoto a través de SSH, excepto al que configuró (en nuestro caso, es Ubuntu).
Quiero otorgar permisos a más clientes para acceder al servidor SSH remoto. ¿Qué tengo que hacer? Sencillo. Debe generar el par de claves SSH en todos sus sistemas cliente y copiar la clave pública ssh manualmente en el servidor remoto al que desea acceder a través de SSH.
Para crear un par de claves SSH en sus sistemas cliente, ejecute:
$ ssh-keygen
Introduzca la frase de contraseña dos veces. Después de generar el par de claves, copie la clave ssh pública (no la clave privada) en su servidor remoto manualmente.
Muestre la clave de pub usando el comando:
$ cat ~/.ssh/id_rsa.pub
Debería ver una salida similar a la siguiente.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 [email protected]
Copie todo el contenido (a través de una unidad USB o cualquier medio) y vaya a la consola de su servidor remoto. Cree un directorio llamado ssh en el directorio de inicio como se muestra a continuación.
$ mkdir -p ~/.ssh
A continuación, agregue la clave de publicación de su sistema cliente que generó en el paso anterior en un archivo llamado "~/.ssh/authorized_keys" :
echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
Reinicie el servicio ssh en el sistema remoto. Ahora, podrá acceder a su servidor mediante SSH desde el nuevo cliente.
Si agregar manualmente ssh pubkey parece difícil, habilite la autenticación basada en contraseña temporalmente en el sistema remoto y copie la clave usando el comando "ssh-copy-id" de su sistema local y finalmente deshabilite la autenticación basada en contraseña.
Lectura relacionada:
- Cómo configurar la autenticación multifactor para SSH en Linux
- Encuentre si un usuario está usando autenticación SSH basada en contraseña o clave
- SSLH:comparta un mismo puerto para HTTPS y SSH
- ScanSSH:servidor SSH rápido y escáner proxy abierto
Conclusión
La autenticación basada en claves SSH proporciona una capa adicional de protección contra ataques de fuerza bruta. Como puede ver, configurar la autenticación basada en claves tampoco es tan difícil. Es uno de los métodos recomendados para mantener sus servidores Linux seguros y protegidos.