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.

Keychain is a frontend to and, allowing long running sessions and letting the user enter passphases just once. It can also be used to allow scripts access to SSH connections.

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 :

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.

Adding or changing a passphrase for the private key can be done as follows:

Preparar el servidor
Se necesita copiar el archivo al servidor lanzando. Se debe añadir al archivo que pertenece al usuario que se conecta al servidor remoto. Una vez se haya concedido acceso 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:

es un guión envoltorio para realizar estos pasos. Si no se dispone de este guión, entonces se puede serguir estos pasos:

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 del servidor lo permite (ya que esto se puede configurar), debería obtener acceso  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 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.

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, se debería motrar el identificador del proceso (PID) además de establecer valores para algunas variables de entorno, en particular, SSH_AUTH_SOCK y SSH_AGENT_PID. 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 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.

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. Agregue lo siguiente al archivo para habilitarlo:

Add the following to the shell initialization file (,, or similar) to enable it:

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.

All shells opened after that point should reuse the, allowing to use passwordless SSH connections over and over.

Usar keychain con Plasma 5
Los usuarios de Plasma 5, en lugar de utilizar, pueden dejar a Plasma 5 que se encargue del ssh-agent. Para ello, tendrán que editar el fichero, que se lee durante el inicio de Plasma, y el fichero , que se ejecuta durante su apagado. A continuación se muestra como podrían editarse estos ficheros:

Here is how one could edit those files:

Ahora, todo lo que se tiene que hacer es lanzar el terminal que se desee, por ejemplo, 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 Plasma (o hasta que se termine con el proceso ssh-agent de forma manual).

Alternatively use KWallet with kde-plasma/ksshaskpass under Plasma 5
You can also have Plasma automatically ask you for your passphrase upon desktop login. Emerge kde-plasma/ksshaskpass, which will set up an environment variable to use the ksshaskpass application whenever ssh-add is run outside of a terminal. Then create a script as follows, and install it via the Plasma -> System Settings -> Startup and Shutdown -> Autostart.

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 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  o cambie el fichero  del servidor.
 * Si al conectar con o  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

 * La página oficial del proyecto Keychain en Funtoo.org
 * Series de artículos de IBM developerWorks que presentan los conceptos detrás de Keychain