GNU/Linux >> Tutoriales Linux >  >> Linux

SSH sin contraseña usando pares de claves públicas y privadas

Si interactúa regularmente con comandos SSH y hosts remotos, puede encontrar que usar un par de claves en lugar de contraseñas puede ser conveniente. En lugar de que el sistema remoto solicite una contraseña con cada conexión, la autenticación se puede negociar automáticamente mediante un par de claves pública y privada.

La clave privada permanece segura en su propia estación de trabajo y la clave pública se coloca en una ubicación específica en cada sistema remoto al que accede. Su clave privada puede protegerse localmente con una frase de contraseña. Un programa de almacenamiento en caché local como ssh-agent o gnome-keyring le permite ingresar esa frase de contraseña periódicamente, en lugar de cada vez que usa la clave para acceder a un sistema remoto.

[ Descarga gratuita:hoja de referencia de comandos avanzados de Linux. ]

Generando un par de claves y propagando la clave pública

Generar su par de claves y propagar su clave pública es más simple de lo que parece. Recorrámoslo.

Generando la clave

El esfuerzo mínimo para generar un par de claves implica ejecutar ssh-keygen y seleccionando los valores predeterminados en todas las indicaciones:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/training/.ssh/id_rsa): 
Created directory '/home/training/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/training/.ssh/id_rsa.
Your public key has been saved in /home/training/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qOoqJFfbfnBFMZ6WFsZQZfy6WXTfcknQEd0B+quTjHw [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|        .+*+o.o+*|
|         oo*o. .o|
|         .*. ..  |
|    .  . o. . o..|
|   . o. S.   +..+|
|... ..o .   . +.+|
|o.  .. o. o .= o |
|.  .  . .o E+    |
|ooo    .  ...    |
+----[SHA256]-----+

La ubicación predeterminada para almacenar las claves es ~/.ssh directorio, que se creará si no existe:

$ ls -al .ssh
total 16
drwx------. 2 training training 4096 Aug 12 07:43 .
drwx------. 5 training training 4096 Aug 12 07:43 ..
-rw-------. 1 training training 1843 Aug 12 07:43 id_rsa
-rw-r--r--. 1 training training  415 Aug 12 07:43 id_rsa.pub

Permitir que este comando cree el directorio también garantiza que el propietario y los permisos estén configurados correctamente. Algunas aplicaciones no usarán claves si los permisos de la clave privada son demasiado abiertos.

El archivo que termina en .pub es la clave pública que debe transferirse a los sistemas remotos. Es un archivo que contiene una sola línea:El protocolo, la clave y un correo electrónico utilizado como identificador. Opciones para ssh-keygen El comando le permite especificar un identificador diferente:

$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ4SCcMX1EK31G/qLyCs3PaFcWkx0QA61OwQNHYztvrg7iD/etN4S5UP6ugHjTcUvqD/fZJFBJeryK0Hz0FzejKYiJBxQuUqadyXFSW30VnW6mAzgNoz20rGc2mipUrsaqdBWWv5U7vX8sgjEHEgVHzq6pfWj681PtikJ8Dss1IvPiPvOoRz2jb1dQnnrAVqMDGeWbm4yjYQamPvnLo1Hy23NgXpZ7KXv9PuDDu3tqcoMUqFk7sHswMrCCUY9SWOD5JBbhD3JX4LPs68WWbETOqOQ3a9ebTsL3wRPSbuu/djhL9Qmd8fN2OaM2U2zFpeE3NzBq4KT/ml6RTv44EMuh [email protected]

Después de generar el par de claves, el ssh-keygen El comando también muestra la huella dactilar y la imagen aleatoria que son exclusivas de esta clave. Esta información se puede compartir con otras personas que pueden necesitar verificar su clave pública.

Más tarde puede verlos con:

$ ssh-keygen -lv
Enter file in which the key is (/home/training/.ssh/id_rsa): 

El -l opción enumera la huella digital y el -v opción agrega el arte ASCII.

Propagación de la clave pública a un sistema remoto

Si la autenticación de contraseña está habilitada actualmente, entonces la forma más fácil de transferir la clave pública al host remoto es con ssh-copy-id dominio. Si usó el nombre predeterminado para la clave, todo lo que necesita especificar es el usuario remoto y el host:

$ ssh-copy-id susan@streamer
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/training/.ssh/id_rsa.pub"
/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
susan@streamer's password: 

Number of key(s) added: 1

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

Siguiendo las instrucciones de la salida, verifique que pueda conectarse usando el par de claves. Si implementó una frase de contraseña, se le solicitará la frase de contraseña para usar la clave privada:

$ ssh susan@streamer
Last login: Sat Aug 10 14:09:33 2019 from X.X.X.X

Examine el archivo de clave autorizado resultante. Aquí es donde se agregó la clave pública. Si el directorio o el archivo no existían, entonces se crearon (o se crearon) con la propiedad y los permisos correctos. Cada línea es una única clave pública autorizada:

[susan@streamer ~]$ cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ4SCcMX1EK31G/qLyCs3PaFcWkx0QA61OwQNHYztvrg7iD/etN4S5UP6ugHjTcUvqD/fZJFBJeryK0Hz0FzejKYiJBxQuUqadyXFSW30VnW6mAzgNoz20rGc2mipUrsaqdBWWv5U7vX8sgjEHEgVHzq6pfWj681PtikJ8Dss1IvPiPvOoRz2jb1dQnnrAVqMDGeWbm4yjYQamPvnLo1Hy23NgXpZ7KXv9PuDDu3tqcoMUqFk7sHswMrCCUY9SWOD5JBbhD3JX4LPs68WWbETOqOQ3a9ebTsL3wRPSbuu/djhL9Qmd8fN2OaM2U2zFpeE3NzBq4KT/ml6RTv44EMuh [email protected]

Para revocar el acceso a este par de claves, elimine la línea de la clave pública.

Hay muchas otras opciones que se pueden agregar a esta línea en el archivo de claves autorizadas para controlar el acceso. Estas opciones suelen ser utilizadas por los administradores que colocan las claves públicas en un sistema con restricciones. Estas restricciones pueden incluir dónde se puede originar la conexión, qué comandos se pueden ejecutar e incluso una fecha que indica cuándo dejar de aceptar esta clave. Estas y más opciones se enumeran en el sshd página man.

Cambiando la frase de contraseña

Si necesita cambiar una frase de contraseña en su clave privada o si inicialmente configuró una frase de contraseña vacía y desea esa protección en un momento posterior, use ssh-keygen comando con -p opción:

$ ssh-keygen -p
Enter file in which the key is (/home/training/.ssh/id_rsa): 
Key has comment '[email protected]'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Puede agregar opciones adicionales para especificar la clave (-f ), y el antiguo (-P ) o nuevo (-N ) frases de contraseña en la línea de comando. Recuerde que cualquier contraseña especificada en la línea de comando se guardará en su historial de shell.

Ver el ssh-keygen página man para opciones adicionales.

Teclas giratorias

Si bien la clave pública en sí misma está destinada a ser compartida, tenga en cuenta que si alguien obtiene su clave privada, puede usarla para acceder a todos los sistemas que tienen la clave pública. Estos pares de claves tampoco tienen un período de validez como las claves GNU Privacy Guard (GPG) o los certificados de infraestructura de clave pública (PKI).

Si tiene alguna razón para sospechar que una clave privada ha sido robada o comprometida, debe reemplazar ese par de claves. La antigua clave pública debe eliminarse de todos los sistemas, se debe generar una nueva clave con ssh-keygen y la nueva clave pública debe transferirse a los sistemas remotos deseados.

Si está rotando claves como precaución y sin ninguna preocupación de compromiso, puede usar el par de claves anterior para autenticar la transferencia de la nueva clave pública antes de eliminar la clave anterior.

¿Alguna vez es una buena idea usar frases de contraseña vacías?

Hay varias cosas en las que pensar al considerar una frase de contraseña vacía para su clave privada SSH.

¿Qué tan seguro es el archivo de clave privada?

Si tiende a trabajar desde varios sistemas cliente y desea tener varias copias de su clave o conservar una copia en un medio extraíble, entonces es realmente una buena idea tener una frase de contraseña en la clave privada. Esta práctica se suma a la protección del acceso al archivo de claves con medios cifrados.

Sin embargo, si solo tiene una copia de la clave privada y se mantiene en un sistema que está bien protegido y no se comparte, entonces tener una frase de contraseña es simplemente un nivel más de protección por si acaso.

Recuerde que cambiar la frase de contraseña en una copia no cambia la frase de contraseña en otras copias. La frase de contraseña simplemente bloquea el acceso a un archivo de clave específico.

¿Por qué crees que necesitas una frase de contraseña vacía?

Hay casos de claves con frases de contraseña vacías. Algunas utilidades que necesitan transferir archivos automáticamente entre sistemas necesitan un método sin contraseña para autenticarse. El kdump La utilidad, cuando se configura para volcar el kernel a un sistema remoto usando SSH, es un ejemplo.

Otro uso común es generar un par de claves para un script que está diseñado para ejecutarse sin supervisión, como desde un trabajo cron.

¿Qué tal una alternativa de término medio?

Por sí misma, una clave privada protegida con frase de contraseña requiere que se ingrese la frase de contraseña cada vez que se usa la clave. Esta configuración no se siente como SSH sin contraseña. Sin embargo, existen mecanismos de almacenamiento en caché que le permiten ingresar la frase de contraseña de la clave una vez y luego usar la clave una y otra vez sin volver a ingresar esa frase de contraseña.

OpenSSH viene con un ssh-agent demonio y un ssh-add utilidad para almacenar en caché la clave privada desbloqueada. El escritorio GNOME también tiene un demonio de llavero que almacena contraseñas y secretos, pero también implementa un agente SSH.

La vida útil de la clave almacenada en caché se puede configurar con cada uno de los agentes o cuando se agrega la clave. En muchos casos, el tiempo de vida predeterminado es ilimitado, pero la memoria caché se borra cuando el usuario cierra la sesión del sistema. Se le solicitará la frase de contraseña solo una vez por sesión de inicio de sesión.

Si hay una aplicación programada que necesita ejecutarse fuera de una sesión de inicio de sesión de usuario, es posible usar un secreto u otro administrador de contraseñas para automatizar el desbloqueo de la clave. Por ejemplo, Ansible Tower almacena las credenciales en una base de datos segura. Esta base de datos incluye una clave privada SSH utilizada para conectarse a los sistemas remotos (nodos administrados) y cualquier frase de contraseña necesaria para esas claves privadas. Una vez que se almacenan esas credenciales, se puede programar un trabajo para ejecutar un libro de jugadas en un horario regular.

Automatización de la propagación

Un administrador de identidad centralizado como FreeIPA puede ayudar con la propagación de claves. Cargue la clave pública en el servidor como un atributo de una cuenta de usuario y luego propáguela a los hosts del dominio según sea necesario. FreeIPA también puede proporcionar un control de acceso adicional basado en host para saber dónde se puede usar una clave.

Las claves también se pueden distribuir mediante módulos Ansible. El openssh_keypair módulo utiliza ssh-keygen para generar claves y la authorized_key módulo agrega y elimina claves SSH autorizadas para cuentas de usuario particulares.

Resumiendo

Los pares de claves SSH son solo una forma de automatizar la autenticación sin contraseñas. El uso de la autenticación de la interfaz de programa de aplicación de servicios de seguridad genéricos (GSSAPI) también es común cuando se intenta reducir el uso de contraseñas en una red con administración de usuarios centralizada. Los pares de claves SSH son la opción más fácil de implementar cuando el inicio de sesión único (SSO) aún no está disponible.

Muchos repositorios de código fuente otorgan acceso mediante claves SSH. Puede cargar una clave pública en una cuenta en la organización de alojamiento, como el sistema de cuentas de Fedora, GitLab o los sitios de GitHub, y usar ese par de claves para autenticarse al extraer y enviar contenido a los repositorios.


Linux
  1. Administre pares de claves SSH para servidores en la nube con python-novaclient

  2. Cómo configurar las claves SSH para el inicio de sesión ssh "sin contraseña" en Linux

  3. Cómo usar el comando ssh-keygen para configurar ssh sin contraseña

  4. Cómo funciona SSH sin contraseña en Linux / UNIX

  5. Cómo evitar que ssh solicite una frase de contraseña clave para inicios de sesión sin contraseña

Cómo configurar el inicio de sesión sin contraseña SSH en AlmaLinux

Configure el inicio de sesión SSH sin contraseña para varios servidores remotos mediante script

¿Cómo configurar la autenticación basada en clave Ssh para Github usando el archivo ~/.ssh/config?

Inicio de sesión SSH sin contraseña en 3 pasos simples

Cómo generar y usar una clave SSH usando PuTTY

Genere claves RSA con SSH usando PuTTYgen