Uso de ssh-keygen y uso compartido para la autenticación de claves en Linux

Si ha trabajado como administrador de sistemas antes (o quiere hacerlo en el futuro), necesita un buen conocimiento de SSH. No voy a guiarlo a través del concepto general, ya que ya se ha explicado aquí en Habilitar Sysadmin. Sin embargo, quiero ver una mejor manera de usarlo. SSH es el protocolo de acceso remoto más utilizado en el mundo. Por lo tanto, tiene sentido que intentemos mejorar su uso tanto como sea posible.

He usado SSH para conectarme de forma remota a miles de máquinas cliente durante mi mandato como ingeniero de soporte y estoy seguro de que otros han tenido una experiencia similar. Con la autenticación SSH tradicional, necesita el nombre de usuario y la contraseña de la cuenta en la que desea iniciar sesión cada vez que desea acceder a un sistema. No suena tan mal, ¿verdad? Pero, ¿qué sucede cuando tienes que cambiar regularmente entre sistemas? ¿O qué sucede si sus responsabilidades incluyen sesiones remotas en los mismos 100 sistemas durante todo el día para realizar revisiones? Hay otra forma de hacer la conexión, y con una pequeña inversión inicial puede ser mucho más eficiente en general.

Índice

Endurecimiento del proceso.

Es objetivamente cierto que una clave encriptada es un objetivo mucho más difícil que un nombre de usuario y contraseña para aquellos con malas intenciones. Si bien puede llevar un poco de aprendizaje, vale la pena la inversión para crear y usar la autenticación de clave SSH para cada administrador de sistemas.

Así es como funciona. Generas una clave pública y una clave privada correspondiente. El archivo de clave privada actúa como un archivo y debe guardarse en un lugar seguro. Sin embargo, la clave pública se copia en los sistemas de destino en los que inicia sesión regularmente. Coloca la clave pública en el directorio de inicio de su cuenta en el servidor de destino. Cuando intenta iniciar sesión, las claves se verifican y se otorga acceso.

Ahora hay dos maneras de hacerlo. Uno es más conveniente y el otro es un poco complicado pero con protección adicional para usted. La forma más conveniente es no especificar una contraseña con la clave privada. El resultado es que no tiene que ingresar una contraseña cuando usa su clave privada para la autenticación. Esto significa que si alguien obtiene su clave privada, también puede usarla para autenticarse. El otro método es proteger con contraseña su clave privada para que se le solicite la contraseña durante la autenticación (piense en la autenticación de dos factores utilizando tanto la clave privada como la contraseña).

ssh-keygen sin contraseña

Para generar un par de claves SSH, use el siguiente comando:

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

De forma predeterminada, sus claves públicas y privadas se guardan en su ~/.ssh/id_rsa y ~/.ssh/id_rsa.pub archivos, respectivamente.

ssh-keygen con contraseña

La creación de una clave protegida con contraseña se ve así:

[[email protected] ~]$ ssh-keygen -f .ssh/key-with-password
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in .ssh/key-with-password.
Your public key has been saved in .ssh/key-with-password.pub.
The key fingerprint is:
SHA256:s7GGB7EyHUry4aOcNPKmhNKS7dl1YsMVLvFZJ77VxAo [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    . + =.o ...  |
|     = B XEo o.  |
|  . o O X =....  |
| = = = B = o.    |
|= + * * S .      |
|.+ = o + .       |
|  + .            |
|                 |
|                 |
+----[SHA256]-----+

Utilizar el -f opción para especificar el archivo donde se guardarán las claves. En el ejemplo anterior, las claves pública y privada se almacenan en el /home/user/.ssh/key-with-pass y /home/user/.ssh/key-with-pass.pub archivos, respectivamente.

Advertencia

Al generar pares de claves SSH más adelante, si no especifica un nombre de archivo único, se le solicitará que permita sobrescribir el archivo existente. id_rsa y id_rsa.pub archivos. Si sobrescribe el existente id_rsa y id_rsa.pub archivos, entonces debe reemplazar la clave pública anterior con la nueva en TODO Servidores SSH que tienen su antigua clave pública.

Una vez que genera las claves, se almacenan en el /user/home/.ssh/ directorio con los siguientes permisos:

  • Clave privada - 600
  • Clave pública - 644

Aún no has terminado. Echemos un vistazo al último paso de la autenticación exitosa de la clave SSH.

Compartir clave

Para que esto funcione, debe compartir su clave pública con las máquinas remotas con las que intenta conectarse mediante SSH. Utilizar el ssh-copy-id para copiar su clave pública en el sistema de destino. Por defecto, la ruta del archivo es /home/user/.ssh/id_rsa.pub. Ejecuta el comando, especifica el archivo que está compartiendo y luego el usuario/host con el que lo estamos compartiendo. Debe tener un aspecto como este:

[[email protected] ~] $ ssh-copy-id -i .ssh/key-with-pass.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.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
[email protected] password: changeme
Number of key(s) added: 1

Ahora que ha compartido la clave pública con el host de destino, puede autenticarse con el servidor remoto pasando la clave privada correspondiente. Si ha especificado una ruta de archivo para su clave privada, debe proporcionarla aquí. De lo contrario, es predeterminado /home/_user_/.ssh/id_rsa.

Visto aquí:

[[email protected] ~]$ ssh -i .ssh/key-with-password [email protected] 
Enter passphrase for key '.ssh/key-with-password' : password here if you set one
[[email protected] ~] $

Beneficios y resumen

Las ventajas de la autenticación con clave SSH son claras. Las contraseñas son robadas todos los días, principalmente por errores humanos, pero también por la habilidad y determinación de los atacantes. Una clave cifrada, y más específicamente una clave cifrada protegida con contraseña, hace que su autenticación SSH sea aún más difícil de atacar. Todavía necesita lograr un equilibrio entre disponibilidad y seguridad, pero esto se maneja de manera diferente en cada entorno.

Artículos de interés

Subir