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
So you have all of these lovely Gentoo machines running sshd, but it's a little inconvenient for you to keep typing in all of those login passwords, right? Or maybe you have a script or cron-job that needs a convenient way to use an ssh connection. Either way, there is a solution to this problem, and it begins with public key authentication.

¿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
The first step is to create your key pair. To do this, we will use the ssh-keygen command as follows:

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
We will be copying the file over to the server that runs sshd. We will also be adding it to the file that belongs the connecting user on that server. Here's an example of how to do that if you already have ssh access to the server.

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_rsa 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
If you've been following along, you're probably thinking that it would be great if we could somehow decrypt our private key(s) once, and gain the ability to ssh freely, without any passwords. You are in luck, that is exactly what the program ssh-agent is for.

ssh-agent is usually started at the beginning of the X session, or from a shell startup script like. It works by creating a unix-socket, and registering the appropriate environment variables so that all subsequent applications can take advantage of it's services by connecting to that socket. Clearly, it only makes sense to start it in the parent process of an X session to use the set of decrypted private keys in all subsequent X applications.

When you run ssh-agent, it should output the PID of the running ssh-agent, and also set a few environment variables, namely  and. It should also automatically add to it's collection and ask you for the corresponding passphrase. If you have other private keys you want to add to the running ssh-agent, you can use the ssh-add command as follows:

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:

Ahora vamos a probarlo. En primer lugar asegúrese de que ha acabado con el ssh-agent iniciado en la sección anterior. A continuación iniciamos un nuevo intérprete de órdenes, normalmente accediendo a nuestro sistema o abriendo un nuevo terminal. Debería pedirle la contraseña para cada clave especificada en la línea de la orden. Todos los intérpretes de órdenes que se abran a partir de este momento debería reutilizar a ssh-agent, permitiéndole realizar conexiones ssh sin utilizar contraseña una y otra vez.

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:

Ahora, todo lo que tiene que hacer es iniciar el terminal que desee, por ejemplo, Konsole, y cargar las claves que le gustaría usar. Por ejemplo:

Se recordarán sus claves hasta que finalice su sesión de KDE o acabe manualmente con el proceso ssh-agent.

Consideraciones sobre la seguridad
Por supuesto, el uso de ssh-agent puede añadir un poco de inseguridad a su sistema. Si alguien utiliza el intérprete de órdenes mientras hemos ido al baño, podría acceder a todos nuestros servidores sin utilizar contraseña alguna. Por tanto, esto es una amenaza para los servidores a los cuales se conecta, por lo que debiera consultar la directriz de seguridad local. Si utilizar ssh-agent, asegúrese de tomar las medidas apropiadas para garantizar la seguridad de sus sesiones.

Solución de problemas
La mayoría de lo que hemos visto debería funcionar correctamente, pero si encuentra algún problema, valdrá la pena recordar algunas cosas útiles.


 * If you are unable to connect without ssh-agent, consider using ssh with the arguments  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   option with ssh, or change the server.
 * 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.

External resources

 * Página oficial del proyecto
 * Series de artículos de IBM developerWorks que presentan los conceptos detrás de Keychain