Skip to content

Instantly share code, notes, and snippets.

@ivanhercaz
Last active July 13, 2021 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ivanhercaz/b26b99e156201a5d9e3188a9b70cc476 to your computer and use it in GitHub Desktop.
Save ivanhercaz/b26b99e156201a5d9e3188a9b70cc476 to your computer and use it in GitHub Desktop.
Reenvío de agentes (AgentForwarding) o cómo utilizar tu clave SSH en otro servidor

A veces tenemos que trabajar en local, otras en un servidor y otras en diferentes servidores. Tenemos la opción de tener una clave SSH para cada uno de ellos, ¿por qué no? Pero también tenemos la posibilidad de utilizar una clave local específica.

ssh-agent

Un agente ssh (ssh-agent) es un mecanismo que almacena las claves privadas decodificadas en memoria como un proceso en segundo plano. Para ello debemos asegurarnos de tener ssh-agent en ejecución:

eval "$(ssh-agent)"

Que debería resultar en algo parecido a:

SSH_AUTH_SOCK=/tmp/ssh-XXXXXXcpXakZ/agent.16263; export SSH_AUTH_SOCK;
SSH_AGENT_PID=16263; export SSH_AGENT_PID;
echo Agent pid 16263;

Reenvío del agente al servidor (AgentForwarding)

Por otra parte, el reenvío de agentes (AgentForwarding) es un mecanismo por el que un cliente SSH permite a un servidor SSH utilizar un agente local en las operaciones del servidor. Para ello debemos configurar el entorno.

Primero debemos modificar nuestro archivo de configuración de SSH para permitir el reenvío del agente al host:

Host servidor
  ...
  ForwardAgent yes
  ...

Ejecutamos ssh-add -L para confirmar si tenemos algún agente añadido, si lo hay mostrará la clave pública de dicho agente. Lo más probable es que no haya ninguno añadido, así que procedemos a incluir la clave que nos interesa con ssh-add ~/.ssh/nombre_clave_privada.

Ahora nos conectamos al servidor (ssh servidor) y confirmamos que funciona. Por ejemplo, a mí me interesaba acceder a una instancia privada de Gitea en la que estaba configurada mi clave:

ssh -T git@loquesea.xyz
> Hi there! You've successfully authenticated with the deploy key named [nombre de la clave en Gitea], but Gitea does not provide shell access.
If this is unexpected, please log in with password and setup Gitea under another user.

Si no pudiese conectarse, podría ser debido a que la clave no es correcta, no está configurada o que el reenvío de agentes no se ha realizado correctamente. Siempre se puede ejecutar ssh -vT git@loquesea.xyz para ver el log completo del proceso.

Si queremos descartar el problema con el agente podemos comprobar si echo $SSH_AUTH_SOCK devuelve una cadena como la siguiente:

echo $SSH_AUTH_SOCK
> /tmp/ssh-c7HJflqjHW/agent.11709

Si no devuelve nada, es que el agente no ha sido configurado correctamente, por el lado local, del servidor o de ambos.

Pero lo mejor para el final. En realidad, si quieres confirmar si la clave ha sido reenviada al servidor, solo tienes que ejecutar ssh-add -L, tal y como hicimos previamente. Si se ha transferido el agente con su respectiva clave privada decodificada, al ejecutar este comando en el servidor debería mostrarnos nuestra clave pública. O todas las claves públicas de los agentes que hemos reenviado, ¡ya que se puede añadir más de un agente!

Notas sobre este "microtutorial"

No soy ningún experto en SSH ni pretendo serlo, pero me he topado con esta necesidad y, tras ser animado por un buen compañero, he creído conveniente difundir con ustedes esto. Espero que les ayude en caso de que algún día lo necesiten.

Les comparto además algunas referencias, en inglés que he encontrado sobre el tema y que probablemente expliquen algo mejor que yo todo este asunto (yo he querido ser breve y directo):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment