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
Tener que teclear contraseñas para todos y cada uno de los sistemas es bastante pesado, especialmente si se gestionan muchso sistemas. Algunos administradores podrían echar en falta un guión o trabajo programado que necesita una forma adecuada de utilizar una conexión ssh. De cualquier forma, 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 un cliente quiere conectarse al demonio ssh de un servidor. 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, la respuesta correcta conduce a una autenticación exitosa.

Generar un par de claves
El primer paso consiste en crear un par de claves. Para hacer esto, se usa la orden ssh-keygen:

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

Una vez haya finalizado la generación, debería aparecer una clave privada en y una clave pública en. La clave pública está ahora preparada para copiarse al equipo remoto.

Preparar el servidor
Se necesita copiar el archivo al servidor lanzando sshd. Se debe añadir al archivo que pertenece al usuario que se conecta al servidor remoto. Una vez se haya concedido acceso ssh al servidor por el personal de infraestructura, se pueden realizar los siguientes pasos para configurar el acceso atuomático usando una clave pública en el servidor remoto:

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

Probar la configuración
Teóricamente, si todo ha ido bien y el demonio ssh del servidor lo permite (ya que esto se puede configurar), debería obtener acceso ssh al servidor sin tener que introducir la contraseña. Todavía hace falta descifrar la clave privada en el cliente con la contraseña establecida anteriormente, pero no se debe confundir esto con la contraseña de la cuenta del usuario en el servidor.

Se debería haber pedido una contraseña para, y entonces conceder el acceso vía ssh como el usuario  al servidor. Si no es así, entre como, y verifique que el contenido de  tiene todas las entradas (que representan una clave pública) en una sola línea. También es una buena idea comprobar la configuración de sshd para asegurarse que permite la autorización mediante clave pública cuando está disponible.

En este momento, el lector podría estar pensando "¿Cuál es la gracia? ¡Solo he cambiado una contraseña por otra!" Relájese, en la siguiente sección se muestra exactamente como podemos utilizar esto para introducir la contraseña una vez y reutilizarla (descifrada) varias veces para realizar múltiples accesos.

Gestión típica de claves con ssh-agent
El siguiente paso es descifrar la(s) clave(s) privada(s) una sola vez y así poder usar ssh libremente sin más contraseñas. Eso es exactamente para lo que sirve el programa ssh-agent.

ssh-agent normalmente se inicia al comienzo de la 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 una sesión X si desea usar las claves privadas descifradas en las aplicaciones X posteriores.

Cuando se corre ssh-agent</tt>, se debería motrar el 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 al usuario la correspondiente contraseña. Si se tienen otras claves privadas que se quieran agregar al ssh-agent que está corriendo, se puede utilizar la orden ssh-add</tt> de la siguiente forma:

Ahora viene la magia. Con la clave privada descifrada, podrá acceder al servidor (configurado para utilizar clave pública) mediante ssh sin teclear contraseña alguna:

Para apagar ssh-agent (y de este modo se solicitará la contraseña de nuevo más tarde):

Para tener más comodidad al 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 ya que keychain gestiona el mismo la sesiones de ssh-agent</tt>.

Sacar hasta la última gota de comodidad de ssh-agent
Keychain permitirá reutilizar un ssh-agent entre un acceso y otro y opcionalmente, le pedirá la contraseña cada vez que el usuario acceda. Se debe hacer emerge en primer lugar:

Asumiendo que no hubo problemas, se puede ahora utilizar keychain</tt>. Agregue lo siguiente al archivo para habilitarlo:

Ahora se puede probar. En primer lugar asegúrese de que ha acabado con los ssh-agent iniciados 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 pedir 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ían reutilizar el ssh-agent, permitiéndole realizar conexiones ssh sin utilizar contraseña una y otra vez.

Usar keychain con KDE
Los usuarios de KDE, en lugar de utilizar, pueden dejar a KDE que se encargue del ssh-agent. Para ello, tendrán 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 se tiene que hacer es lanzar el terminal que se desee, por ejemplo, Konsole, y cargar el conjunto de claves apropiadas que se van a utilizar. Por ejemplo:

Se recordarán las claves hasta que finalice la sesión KDE (o hasta que se termine con el proceso ssh-agent de forma manual).

Consideraciones sobre la seguridad
Por supuesto, el uso de ssh-agent puede añadir un poco de inseguridad al sistema. Si otro usuario obtiene acceso al intérprete de órdenes, podría acceder a todos los servidores sin utilizar contraseña alguna. Por tanto, esto es una amenaza para los servidores a los cuales se conecta, por lo que se debería consultar la directriz de seguridad local (si existe alguna). Asegúrese de tomar las medidas apropiadas para asegurar todas las sesiones.

Solución de problemas
La mayor parte de esto debería funcionar correctamente, pero si aparecen los problemas, se puede buscar la solución en los siguientes documentos.


 * Si al conectar con ssh-agent</tt> las cosas no parecen funcionar, se puede considerar el uso de ssh con las opciones  para averiguar qué puede estar sucediendo. A veces es servidor no está configurado para usar autenticación con clave pública, ¡Incluso a veces está configurado para solicitar las claves locales!. Si este es el caso, intente utilizar la opción   con ssh</tt> o cambie el fichero  del servidor.
 * Si al conectar con ssh-agent</tt> o keychain</tt> las cosas no parecen funcionar, entonces puede ocurrir que el intérprete de órdenes actual no comprenda las órdenes utilizadas. Consulte las páginas del manual de ssh-agent y keychain para obtener detalles sobre su funcionamiento en otros intérpretes de órdenes.

Recursos externos

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