Wie kann ich ssh-agent in allen Terminals zum Laufen bringen?

27

Ich habe die automatische (kennwortlose) SSH-Anmeldung bei einigen Servern mit der SSH-Kopier-ID eingerichtet. ssh-agentFunktioniert nur von dem Terminal aus, auf dem es ausgeführt wurde. Wie komme ich ssh-addan all meinen Terminals zur Arbeit?

Natürlich würde ich keinen SSH-Schlüssel ohne Passphrase bevorzugen.

Gowtham
quelle

Antworten:

26

Wenn Sie sich in eine grafische Sitzung einloggen, vereinbaren Sie, dass Sie ssh-agentwährend des Sitzungsstarts starten . Einige Distributionen erledigen das bereits für Sie. Wenn dies nicht der Fall ist, können Sie die Ausführung ssh-agentvon Ihrem Sitzungsstart-Skript oder von Ihrem Fenstermanager aus arrangieren . Wie Sie das tun, hängt von Ihrer Desktop-Umgebung und Ihrem Fenstermanager ab. Wenn Sie beispielsweise Ihren Fenstermanager manuell starten, ersetzen Sie einfach den Anruf my_favorite_wmdurch ssh-agent my_favorite_wm.

Beginnen Sie nicht ssh-agentaus .bashrcoder .zshrc, da diese Dateien von jedem neu interaktiv Shell ausgeführt werden. Der Startort ssh-agentist eine Sitzungsstartdatei wie .profileoder .xsession.

Wenn Sie denselben SSH-Agenten für alle Prozesse verwenden möchten, unabhängig davon, von wo Sie sich angemeldet haben, können Sie festlegen, dass er immer denselben Socket-Namen verwendet, anstatt einen zufällig benannten Socket zu verwenden. Zum Beispiel könnten Sie dies in Ihre einfügen ~/.profile:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi
Gilles 'SO - hör auf böse zu sein'
quelle
Der Grund für die Überprüfung $? -ge 2ist, dass Exit-Code 1 ist, wenn der SSH-Agent keine Schlüssel hat, aber SSH-Agent bereits ausgeführt wird.
wisbucky
7

Sie möchten wahrscheinlich ein Programm wie Keychain , das genau für diesen Zweck entwickelt wurde. Von der Manpage:

DESCRIPTION
   keychain is a manager for ssh-agent, typically run from ~/.bash_profile.
   It allows your shells and cron jobs to share a single ssh-agent process.
Snapshoe
quelle
mag dieses wirklich!
Colin D
Groß! Danke dir. Funktioniert perfekt.
Jemand
Dies funktioniert hervorragend, nachdem Sie die komprimierte Datei von Github heruntergeladen haben, stellen Sie sicher, dass Sie den vollständigen Pfad des unkomprimierten keychain-2.8.5-Verzeichnisses zu Ihrem ~ / .bash_profile-Export hinzufügen. PATH = $ PATH: line
Kevin Zhao
4

Wenden Sie es auf Ihre Desktop-Umgebung oder Ihren Fenstermanager an. Wenn ich dies in der Vergangenheit manuell mit einem Brauch gemacht habe ~/.Xclients, habe ich dies nur als letzte Zeile verwendet:

ssh-agent mywindowmanger

Es könnte einige DEs geben, die ihre eigenen Setup-Optionen dafür haben, obwohl es mir scheint, dass (zB) KDE dies nicht tut. Momentan scheint es, dass mein Code von /etc/X11/xinit/xinitrc-common(vermutlich von fedora) ausgeführt wurde, da er für alle Benutzer unabhängig von DE / WM und dem übergeordneten Prozessbefehl aktiv ist $HOME/.Xclients, aber diese Datei nicht referenziert ssh-agent(wohingegen dies der /etc/X11/xinit/xinitrc-commonFall ist).

Wenn Sie keine haben ~/.Xclients, können Sie eine mit nur dieser einen Zeile erstellen, aber Sie müssen den Befehl kennen, der Ihre DE / WM startet.

Goldlöckchen
quelle