Détection du transfert d'agent SSH

19

Comment savoir si une connexion SSH a été établie avec ou sans transfert d'agent?

J'essaie de faire ce qui suit:

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

et comparer la sortie, mais je ne vois que des différences subtiles.

shabunc
la source
1
Pour référence, consultez ce bel article: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Il vous indique un joli dépôt GitHub avec un ssh-find-agentscript pour trouver et utiliser les agents ssh existants, très pratique! Le dépôt a quelques exemples dans le fichier README. Vous pourriez être en mesure de détecter si ssh-agent est activé comme ça, ainsi que d'inspecter les fichiers de configuration SSH, plutôt que de regarder la sortie SSH.
trusktr

Réponses:

21

Lorsque l' agent ssh est activé en avant sur le client ( ForwardAgent yessur ~/.ssh/config) et est également activé sur le serveur distant AllowAgentForwarding yes, lors de la connexion au serveur distant la variable d'environnement SSH_AUTH_SOCKdoit exister. Ensuite, si vous vous connectez à un autre serveur (votre clé publique doit résider sur ce troisième serveur), aucun mot de passe ne devrait vous être demandé.

Clarifier:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
Torian
la source
1
C'est ssh-addce qui a fait l'affaire pour moi. Je travaillais depuis des mois sans le savoir. Ensuite, j'ai changé de bureau d'Unity vers LXDE et le transfert de clé d'agent a cessé de fonctionner.
Mark Hudson
@MarkHudson Pour une raison quelconque, lors de l'exécution de LXDE, vous devez exécuter ssh-addchaque fois que vous ouvrez une nouvelle fenêtre de console. J'ai donc ajouté cette ligne de commande à la fin de ~/.bash_profile, et maintenant le transfert de l'agent d'authentification fonctionne à chaque fois de manière transparente!
Paul Bernal
@PaulBernal Vous ne devriez pas vraiment avoir besoin de faire ça, j'imagine que vous ne l'avez pas ssh-agentconfiguré correctement. Voir mah.everybody.org/docs/ssh
Michael Mrozek
1
m2c: le fichier en "${SSH_AUTH_SOCK}"est une socket, vous pouvez le tester avecif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop
4

La vérification de l'environnement SSH_AUTH_SOCKest bonne pour les connexions ssh directes.

Si vous utilisez des proxys ( proxy_command), vous pourriez avoir une connexion qui ressemble à:

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

Si le transfert d'agent est actif sur tous ces hôtes, il SSH_AUTH_SOCKsera alors défini et "contient" votre clé ssh localsur tous les hôtes.

Supposons maintenant que le transfert d'agent soit désactivé hostBmais activé hostC. SSH_AUTH_SOCKsera activé hostDmais il sera en fait "vide". Bien sûr, l'agent est transféré mais uniquement de hostCà hostD. La chaîne est cassée.

Maintenant, pour vérifier si la clé est disponible, hostDvous pouvez simplement appeler ssh-add. Il sortira avec le code 1 dans tous les cas, mais si la clé n'est pas disponible, il affichera ceci sur stderr:

Impossible d'ouvrir une connexion avec votre agent d'authentification.

Vous pouvez donc vérifier le SSH_AUTH_SOCKplus et vous assurer qu'il ssh_addn'a pas de sortie.

udondan
la source