Keychain/es

Este documento describe cómo usar claves compartidas de SSH junto con el programa keychain. Asume un conocimiento básico de criptografía con clave pública.

Descripción del problema
Así que tiene todas esas hermosas máquinas Gentoo corriendo sshd, pero supone un pequeño inconveniente tener que escribir constantemente todas esas claves de acceso, ¿verdad? O tal vez tenga un guión o trabajo programado que necesita una forma adecuada de utilizar una conexión ssh. De cualquier manera, hay una solución a este problema, que comienza con la autenticación mediante clave pública.

¿Cómo funciona la autenticación con clave pública?
Asumamos que tenemos un cliente que quiere conectarse a un servidor que corre sshd. El cliente, en primer lugar, genera un par de claves y le entrega la clave pública al servidor. Después de esto, cada vez que el cliente intente conectarse, el servidor envía un reto cifrado con la clave pública. Solamente el titular de la correspondiente clave privada (el cliente) puede descifrar el reto, así pues, como habrá adivinado, la respuesta correcta conduce a una autenticación exitosa.

Genere su par de claves
El primer paso consiste en crear su par de claves. Para hacer esto, usaremos la orden ssh-keygen de la siguiente forma:

Simplemente acepte los valores por defecto y asegúrese de introducir una contraseña (passphrase) robusta.

Ahora debería tener una clave privada en y una clave pública en. Estamos listos para copiar la clave pública al servidor remoto.

Preparar el servidor
Copiaremos el fichero al servidor que corre sshd. También lo añadiremos al fichero que pertenece al usuario que se conectará a este servidor. A continuación se muestra un ejemplo de cómo cómo hacerlo si ya tiene acceso ssh al servidor.

La salida de la última línea le debería mostrar el contenido del fichero. Asegúrese de que es correcto.

Probar la configuración
Teóricamente, si todo ha ido bien y el demonio ssh del servidor lo permite, debería obtener acceso ssh sin contraseña en este momento. Todavía hará falta descifrar la clave privada en el cliente con la contraseña que establecimos anteriormente, pero no confunda esto con la contraseña de la cuenta del usuario en el servidor.

Esperemos que se le haya solicitado la contraseña para id_dsa y que haya podido obtener acceso ssh al servidor como usuario_del_servidor. Si no, acceda al servidor como usuario_del_servidor y verifique el contenido del archivo para asegurarse de que cada entrada está en su propia línea. Quizás también quiera revisar la configuración de sshd para determinar que prefiere utilizar la autenticación mediante clave pública cuando ésta esté disponible.

En este momento, seguro que está pensando "¿Cuál será la gracia? ¡Solo he cambiado una contraseña por otra!" Relájese, en la siguiente sección le mostraré exactamente lo que tiene que hacer para ahorrar su precioso tiempo.

Gestión típica de claves con ssh-agent
Si ha llegado hasta aquí, probablemente piense que sería grandioso si pudiésemos, de alguna manera, descifrar nuestra(s) clave(s) privada(s) una sola vez y así poder usar ssh libremente sin más contraseñas. ¡Es afortunado! porque es exactamente para lo que sirve el programa.

El programa  normalmente se inicia al comienzo de una sesión X, o al iniciar una sesión con un guión como. Para funcionar, crea un zócalo (socket) unix y registra las variables de entorno adecuadas para que cualquier aplicación posterior pueda aprovechar sus servicios al conectarse a este zócalo (socket). Por supuesto, solo tiene sentido ejecutarlo en el proceso padre de su sesión X si desea usar las claves privadas descifradas en las aplicaciones X posteriores.

Al correr ssh-agent, le debería notificar su identificador del proceso (PID) además de establecer valores para algunas variables de entorno, en particular,  y. Debería también agregar automáticamente a su colección y pedirle la correspondiente contraseña. Si tiene otras claves privadas que quiera agregar al ssh-agent que está corriendo, puede utilizar la orden  de la siguiente forma:

Ahora viene la magia. Ya que debe tener lista su clave privada descifrada, podrá acceder al servidor mediante ssh sin teclear contraseña alguna.

¿No sería bueno saber cómo parar ssh-agent cuando se necesite?

Si desea aún más comodidad para utilizar ssh-agent, proceda a la siguiente sección sobre el uso de keychain. Asegúrese de acabar con el ssh-agent que esté corriendo tal y como se muestra en el ejemplo anterior, si así lo desea.

Sacar hasta la última gota de comodidad de ssh-agent
Keychain le permitirá reutilizar un ssh-agent entre un acceso y otro y opcionalmente, le pedirá la contraseña cada vez que el usuario acceda. Pero, antes de avanzar demasiado, vamos a correr emerge.

Asumiendo que no hubo problemas, ahora podemos utilizar keychain libremente. Agregue lo siguiente a su para activarlo:

Habilitar keychain en .bash_profile

Let's test it. First make sure we killed the ssh-agent from the previous section, then start up a new shell, usually by just logging in, or spawning a new terminal. It should prompt you for the password for each key you specified on the command line. All shells opened after that point should reuse the ssh-agent, allowing you to make passwordless ssh connections over and over.

Usar keychain con KDE
If you are a KDE user, instead of using, you can let KDE manage ssh-agent for you. In order to do so, you will have to edit, which is read during KDE's startup, and  , which is executed during KDE's shutdown. Here is how you could edit those files:

Editing /etc/kde/agent-startup.sh

Editing /etc/kde/shutdown/agent-shutdown.sh

Now, all you have to do is launch a term of your choice, like Konsole, and load the keys you would like to use. For example:

Your keys will be remembered until you end your KDE session or kill the ssh-agent manually.

Consideraciones sobre la seguridad
Of course, the use of ssh-agent may add a bit of insecurity to your system. If another user were to use your shell while you were in the bathroom, he could login to all of your servers without passwords. As a result, it is a risk to the servers you are connecting to, and you should be sure to consult the local security policy. If you do use it, be sure to take the appropriate measures to ensure the security of your sessions.

Solución de problemas
Most of this should work pretty well, but if you encounter problems, you'll certainly want to know a few useful things.


 * If you are unable to connect without ssh-agent, consider using ssh with the arguments -vvv to find out what's happening. Sometimes the server is not configured to use public key authentication, sometimes it is configured to ask for local passwords anyway! If that is the case, you may want to also use the -o option with ssh, or change the server sshd_config.
 * If you are having problems with ssh-agent or keychain, it may be that you are not using a shell that understands the commands they use. Consult the man pages for ssh-agent and keychain for details on working with other shells.
 * You may also want to visit the keychain homepage for more usage tips.

Agradecimientos
We would like to thank the following authors and editors for their contributions to this guide:


 * Eric Brown
 * Marcelo Goes
 * nightmorph