¿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.
ssh-find-agent
script 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.Respuestas:
Cuando el agente ssh hacia adelante está habilitado en el cliente (
ForwardAgent yes
en~/.ssh/config
) y también está habilitada en el servidor remotoAllowAgentForwarding yes
, al conectarse con el servidor remoto la variable de entornoSSH_AUTH_SOCK
debe 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:
fuente
ssh-add
es 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.ssh-add
cada vez que abre una nueva ventana de consola. ¡Así que agregué esa línea de comando al final~/.bash_profile
y ahora el reenvío del agente de autenticación funciona de manera transparente!ssh-agent
configurado correctamente. Ver mah.everybody.org/docs/ssh"${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
Verificar el entorno
SSH_AUTH_SOCK
es 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_SOCK
se establecerá y "contendrá" su clave sshlocal
en todos los hosts.Ahora suponga que el reenvío de agente está desactivado
hostB
pero activadohostC
.SSH_AUTH_SOCK
se activaráhostD
pero en realidad estará "vacío". Por supuesto, el agente se reenvía, pero solo dehostC
ahostD
. La cadena está rota.Ahora para verificar si realmente la clave está disponible
hostD
, simplemente puede llamarssh-add
. Saldrá con el código 1 en cualquier caso, pero si la clave no está disponible, lo mostrará enstderr
:Para que pueda verificar el
SSH_AUTH_SOCK
plus, asegúrese de quessh_add
no tenga salida.fuente