Detección de reenvío de agentes SSH

19

¿Cómo puedo saber si se ha establecido una conexión SSH con o sin reenvío de agente?

Estoy tratando de hacer lo siguiente:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

y comparar resultados, pero solo puedo ver diferencias sutiles.

shabunc
fuente
1
Como referencia, consulte este bonito artículo: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Te señala un buen repositorio de GitHub con un ssh-find-agentscript para encontrar y usar los agentes ssh existentes, ¡muy útil! El repositorio tiene algunos ejemplos en el archivo README. Es posible que pueda detectar si ssh-agent está habilitado así, junto con la inspección de los archivos de configuración SSH, en lugar de mirar la salida SSH.
trusktr

Respuestas:

21

Cuando el agente ssh hacia adelante está habilitado en el cliente ( ForwardAgent yesen ~/.ssh/config) y también está habilitada en el servidor remoto AllowAgentForwarding yes, al conectarse con el servidor remoto la variable de entorno SSH_AUTH_SOCKdebe existir. Luego, si inicia sesión en otro servidor (su clave pública debe residir en este tercer servidor), no se le solicitará ninguna contraseña.

Para aclarar:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
Torian
fuente
1
Esto ssh-addes lo que hizo el truco para mí. Llevaba meses trabajando sin saberlo. Luego cambié los escritorios de Unity a LXDE y el reenvío de claves del agente dejó de funcionar.
Mark Hudson
@ MarkHudson Por alguna razón, cuando se ejecuta LXDE, debe ejecutarse ssh-addcada vez que abre una nueva ventana de consola. ¡Así que agregué esa línea de comando al final ~/.bash_profiley ahora el reenvío del agente de autenticación funciona de manera transparente!
Paul Bernal
@PaulBernal Realmente no deberías necesitar hacer eso, imagino que no has ssh-agentconfigurado correctamente. Ver mah.everybody.org/docs/ssh
Michael Mrozek
1
m2c: el archivo "${SSH_AUTH_SOCK}"es un socket, puede probarlo conif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop
4

Verificar el entorno SSH_AUTH_SOCKes bueno para las conexiones ssh directas.

Si usa proxies ( proxy_command), es posible que tenga una conexión que se vea así:

local-> hostA-> hostB-> hostC->hostD

Si el reenvío de agente está activo en todos esos hosts, SSH_AUTH_SOCKse establecerá y "contendrá" su clave ssh localen todos los hosts.

Ahora suponga que el reenvío de agente está desactivado hostBpero activado hostC. SSH_AUTH_SOCKse activará hostDpero en realidad estará "vacío". Por supuesto, el agente se reenvía, pero solo de hostCa hostD. La cadena está rota.

Ahora para verificar si realmente la clave está disponible hostD, simplemente puede llamar ssh-add. Saldrá con el código 1 en cualquier caso, pero si la clave no está disponible, lo mostrará en stderr:

No se pudo abrir una conexión con su agente de autenticación.

Para que pueda verificar el SSH_AUTH_SOCKplus, asegúrese de que ssh_addno tenga salida.

udondan
fuente