Configuración y uso de ssh-agent para la autenticación SSH simplificada

Problemas al gestionar múltiples claves SSH

La autenticación mediante claves públicas SSH evita ingresar contraseñas al conectarse a servidores remotos. Sin embargo, cuando un cliente SSH almacena múltiples pares de claves para distintos grupos de servidores, el sistema no puede determinar automáticamente qué clave privada utilizar. Esto provoca que, a pesar de la autenticación por clave, se solicite una contraseña al conectarse.

Por ejemplo, supongamos un entorno donde se gestionan servidores web y bases de datos con claves diferentes. Se distribuyen las claves públicas correspondientes:

ssh-copy-id -i ~/.ssh/clave_web.pub usuario@servidor_web1
ssh-copy-id -i ~/.ssh/clave_web.pub usuario@servidor_web2
ssh-copy-id -i ~/.ssh/clave_bd.pub usuario@servidor_bd1
ssh-copy-id -i ~/.ssh/clave_bd.pub usuario@servidor_bd2

Al intentar conectarse, el cliente no selecciona la clave adecuada automáticamente:

ssh usuario@servidor_web1
# Se solicita la contraseña del servidor

La solución manual es especificar la clave privada durante la conexión:

ssh -i ~/.ssh/clave_web usuario@servidor_web1
ssh -i ~/.ssh/clave_bd usuario@servidor_bd1

Además, si la clave privada está protegida con contraseña, se debe ingresar esta cada vez, lo que resulta tedioso.

Funcionamiento de ssh-agent

ssh-agent actúa como un intermediario que almacena y gestiona claves privadas. Durante la autenticación SSH, el cliente calcula una huella digital de su clave privada y la envía al servidor. El servidor compara esta huella con la de sus claves públicas autorizadas. ssh-agent simplifica este proceso al mantener un registro de las huellas digitales de las claves privadas registradas.

Al usar ssh-agent, se registran las claves privadas mediante el comando ssh-add. El agente almacena las huellas en memoria. Cuando el cliente SSH se conecta a un servidor, la solicitud se redirige a ssh-agent, que busca la huella correspondiente y la envía al servidor. Esto elimina la necesidad de especificar archivos de clave manualmente.

Para que funcione el reenvío de agente, el servidor SSH debe tener habilitada la opción AllowAgentForwarding en su configuración, y el cliente debe usar ForwardAgent.

Iniciando y configurando ssh-agent

Para iniciar ssh-agent y exportar las variables de entorno necesarias:

eval $(ssh-agent)
# Salida similar a: Agent pid 12345

Esto define las variables SSH_AUTH_SOCK (ruta del socket) y SSH_AGENT_PID (identificador del proceso). Luego, se añaden las claves privadas:

ssh-add ~/.ssh/clave_web
ssh-add ~/.ssh/clave_bd

Si las claves tienen contraseña, se solicitará una sola vez al añadirlas. Una vez configurado, las conexiones se simplifican:

ssh usuario@servidor_web1
ssh usuario@servidor_bd1

Gestión y solución de problemas con ssh-agent

ssh-agent depende de las variables de entorno SSH_AUTH_SOCK y SSH_AGENT_PID. Si se inicia en una terminal y esta se cierra, las variables se pierden, aunque el proceso puede permaencer activo. Para recuperar el agente existente, se pueden localizar los sockets en /tmp/:

ls /tmp/ssh-*/agent.*
# Salida: /tmp/ssh-abc123/agent.1234

La variable SSH_AGENT_PID se puede derivar del identificador en el nombre del archivo (agregando 1). Sin embargo, herramientas como ssh-find-agent automatizan esto. Se puede instalar y usar:

wget https://raw.githubusercontent.com/wwalker/ssh-find-agent/master/ssh-find-agent.sh -O /etc/profile.d/ssh-find-agent.sh
chmod +x /etc/profile.d/ssh-find-agent.sh
# En una nueva terminal:
ssh-find-agent -a

Alternativamente, se pueden usar administradores de llaveros como keychain para mantener ssh-agent entre sesiones.

Administración de claves en ssh-agent

Opciones comunes de ssh-agent:

  • -a ruta: Especifica la ruta del socket Unix.
  • -k: Termina el proceso del agente actual.
  • -t tiempo: Define un tiempo de vida para las claves (ej. 30m para 30 minutos).

Comandos útiles de ssh-add:

  • -D: Elimina todas las claves del agente.
  • -d archivo: Elimina una clave específica.
  • -l: Lista las huellas digitales de las claves almacenadas.
  • -L: Muestra las claves públicas en formato autorizado.
  • -t tiempo: Establece un tiempo de vida para una clave.
  • -x y -X: Bloquea y desbloquea el agente con una contraseña.

Estas herramientas permiten una gestión flexible y segura de las claves SSH en entornos con múltiples servidores.

Etiquetas: ssh-agent ssh-keys autenticación-ssh terminal-unix gestión-de-claves

Publicado el 6-24 03:52