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.
ssh-find-agent
Skript 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.Antworten:
Wenn nach vorn ssh - Agent auf dem Client aktiviert ist (
ForwardAgent yes
auf~/.ssh/config
) und auch auf dem Remote - Server aktiviert istAllowAgentForwarding yes
, wenn auf den Remote - Server anmelden die UmgebungsvariableSSH_AUTH_SOCK
sollte 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:
quelle
ssh-add
ist, 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.ssh-add
jedes 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!ssh-agent
richtig eingestellt. Siehe mah.everybody.org/docs/ssh"${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
Das Überprüfen der Umgebung auf
SSH_AUTH_SOCK
ist 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_SOCK
wird Ihr SSH-Schlüssellocal
auf allen Hosts festgelegt und "enthält" .Angenommen, die Agentenweiterleitung ist deaktiviert,
hostB
aber aktivierthostC
.SSH_AUTH_SOCK
wird eingeschaltet, isthostD
aber tatsächlich "leer". Natürlich wird der Agent aber nur vonhostC
bis weitergeleitethostD
. Die Kette ist gebrochen.Jetzt
hostD
können Sie einfach anrufen , um zu überprüfen, ob der Schlüssel tatsächlich verfügbar istssh-add
. Es wird in jedem Fall mit Code 1 beendet, aber wenn der Schlüssel nicht verfügbar ist, wird dies angezeigt beistderr
:Sie können also überprüfen
SSH_AUTH_SOCK
, ob das Pluszeichenssh_add
keine Ausgabe enthält.quelle