Erkennen der SSH-Agentenweiterleitung

19

Wie kann ich herausfinden, ob eine SSH-Verbindung mit oder ohne Agentenweiterleitung hergestellt wurde?

Ich versuche Folgendes zu tun:

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

und Ausgabe vergleichen, aber ich kann nur subtile Unterschiede sehen.

shabunc
quelle
1
Schauen Sie sich als Referenz diesen schönen Artikel an: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Es zeigt Ihnen ein nettes GitHub-Repo mit einem ssh-find-agentSkript zum Auffinden und Verwenden vorhandener ssh-Agenten, sehr praktisch! Das Repo hat einige Beispiele in der README. Möglicherweise können Sie feststellen, ob der ssh-agent auf diese Weise aktiviert ist, und die SSH-Konfigurationsdateien überprüfen, anstatt sich die SSH-Ausgabe anzusehen.
Trusktr

Antworten:

21

Wenn nach vorn ssh - Agent auf dem Client aktiviert ist ( ForwardAgent yesauf ~/.ssh/config) und auch auf dem Remote - Server aktiviert ist AllowAgentForwarding yes, wenn auf den Remote - Server anmelden die Umgebungsvariable SSH_AUTH_SOCKsollte vorhanden sein. Wenn Sie sich dann bei einem anderen Server anmelden (Ihr öffentlicher Schlüssel muss sich auf diesem dritten Server befinden), sollten Sie nicht zur Eingabe eines Kennworts aufgefordert werden.

Zu klären:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
Torian
quelle
1
Das ssh-addist, was den Trick für mich getan hat. Ich hatte monatelang gearbeitet, ohne davon zu wissen. Dann habe ich die Desktops von Unity auf LXDE umgestellt und die Weiterleitung von Agentenschlüsseln funktioniert nicht mehr.
Mark Hudson
@MarkHudson Aus irgendeinem Grund müssen Sie LXDE ssh-addjedes Mal ausführen, wenn Sie ein neues Konsolenfenster öffnen. Also habe ich diese Befehlszeile am Ende von hinzugefügt ~/.bash_profile, und jetzt funktioniert die Weiterleitung des Authentifizierungsagenten jedes Mal transparent!
Paul Bernal
@PaulBernal Das sollte eigentlich nicht nötig sein, ich stelle mir vor, Sie haben es nicht ssh-agentrichtig eingestellt. Siehe mah.everybody.org/docs/ssh
Michael Mrozek
1
m2c: Die Datei in "${SSH_AUTH_SOCK}"ist ein Socket, Sie können es mit testenif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop
4

Das Überprüfen der Umgebung auf SSH_AUTH_SOCKist gut für direkte SSH-Verbindungen.

Wenn Sie proxies ( proxy_command) verwenden, haben Sie möglicherweise eine Verbindung, die wie folgt aussieht:

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

Wenn die Agentenweiterleitung auf allen diesen Hosts aktiv ist, SSH_AUTH_SOCKwird Ihr SSH-Schlüssel localauf allen Hosts festgelegt und "enthält" .

Angenommen, die Agentenweiterleitung ist deaktiviert, hostBaber aktiviert hostC. SSH_AUTH_SOCKwird eingeschaltet, ist hostDaber tatsächlich "leer". Natürlich wird der Agent aber nur von hostCbis weitergeleitet hostD. Die Kette ist gebrochen.

Jetzt hostDkönnen Sie einfach anrufen , um zu überprüfen, ob der Schlüssel tatsächlich verfügbar ist ssh-add. Es wird in jedem Fall mit Code 1 beendet, aber wenn der Schlüssel nicht verfügbar ist, wird dies angezeigt bei stderr:

Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden.

Sie können also überprüfen SSH_AUTH_SOCK, ob das Pluszeichen ssh_addkeine Ausgabe enthält.

udondan
quelle