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 , 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  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_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
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. 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:

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
Si utiliza KDE, en vez de utilizar, puede dejar a KDE que se encargue del ssh-agent. Para ello, tendrá que editar el fichero, que se lee durante el inicio de KDE, y el fichero , que se ejecuta durante el apagado de KDE. A continuación se muestra como podrían editarse estos ficheros:

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.


 * Si no puede conectarse sin ssh-agent, considere usar ssh con el argumento -vvv para averiguar qué está ocurriendo. A veces el servidor no está configurado para hacer uso de autenticación con claves públicas y ¡A veces está configurado para pedir contraseñas locales de todos modos! Si este es el caso, tal vez quiera usar también la opción -o con ssh o cambiar el archivo sshd_config del servidor.
 * Si tiene problemas con ssh-agent o keychain, podría ocurrir que no esté usando un intérprete de órdenes que comprenda las órdenes utilizadas. Consulte las páginas del manual de ssh-agent y de keychain para conocer los detalles de cómo trabajar con otros intérpretes de órdenes.

Recursos externos

 * Página oficial del proyecto
 * Artículo de la serie IBM developerWorks que es una introducción a los conceptos detrás de de Keychain


 * Official project page
 * IBM developerWorks article series introducing the concepts behind Keychain