Ein einfacher Weg, um ssh-agent und ssh-add bei der Anmeldung über SSH auszuführen?

38

Ich versuche, die folgenden Befehle automatisch ausführen zu lassen, wenn ich mich über ssh auf meinem Server anmelde:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Mein SSH-Schlüssel hat eine Passphrase und kann nur einmal pro Login eingegeben werden.

Ich habe versucht, dies in meine .bashrc-Datei zu schreiben, aber ich glaube, dass ssh-agent eine neue Bash-Sitzung startet. Wenn ich versuche, mich anzumelden, nachdem ich dies in meinem .bashrc gespeichert habe, bleibt es hängen und ich muss "exit" eingeben, um die Eingabeaufforderung "passphrace zum Entsperren des Schlüssels eingeben" zu sehen

Irgendwelche anderen Vorschläge?

Auf dem Server läuft Ubuntu LTS

Klicken Sie auf Upvote
quelle
Warum Schlüsselagent auf dem Server? Es sollte sich auf Ihrem lokalen Client befinden , von dem aus Sie eine Verbindung herstellen.
Zoredache
@Zoredache Ich möchte in der Lage sein, git pullund solche auf dem Remote-Server
Klicken Sie auf Upvote
Führen Sie dann einen SSH-Agenten auf Ihrem lokalen Computer aus und leiten Sie den Agenten weiter.
Zoredache
@Zoredache Danke, wusste nicht, dass das möglich ist. Ich möchte jedoch weiterhin in der Lage sein, ssh-add / ssh-agent aus einem Bash-Skript heraus auszuführen, selbst von meinem lokalen Computer aus. Es ist eine Qual, diese Befehle manuell ausführen zu müssen.
Klicken Sie auf "Upvote

Antworten:

52

Sie können Folgendes hinzufügen:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Auf diese Weise ssh-agentstartet das Programm keine neue Shell, sondern startet sich selbst im Hintergrund und gibt die Shell-Befehle aus, um die entsprechenden Umgebungsvariablen festzulegen.

Wie im Kommentar erwähnt, möchten Sie den Agenten möglicherweise gar nicht auf dem Remote-Host ausführen, sondern auf der Box, von der aus Sie arbeiten, und verwenden

ssh -A remote-host

um die Dienste Ihres lokalen SSH-Agenten an den Remote-Host weiterzuleiten.

Aus Sicherheitsgründen sollten Sie die Agentenweiterleitung nur mit Hosts verwenden, die von vertrauenswürdigen Personen ausgeführt werden. Es ist jedoch besser, einen vollständigen Agenten jederzeit remote auszuführen.

Tobi Oetiker
quelle
Wenn ich ersetzen ssh-agent /bin/bashmit ssh-agent -s, und dann versuche ich zu tun git pull, bin ich nach wie vor für das Passwort des privaten Schlüssels aufgefordert , es zu entsperren. Das ist nicht wirklich das, was ich will, ich möchte nur das Passwort eingeben müssen, wenn ich ssh-add mache, und es nicht jedes Mal wiederholen müssen, wenn ich irgendwelche git-Befehle ausführe. Irgendwelche Ideen?
Klicken Sie auf "Upvote
und den Agenten lokal auszuführen und ssh -A zu verwenden, ist für Sie keine Option? Das Problem ist, dass Sie den ssh-agent nicht bei jeder Verbindung neu starten können. Jedes Mal, wenn Sie es starten, weiß es "nichts" und wenn Sie den Schlüssel hinzufügen, müssen Sie ihn entschlüsseln ...
Tobi Oetiker
Für Ihre .ssh / config-Datei: Host Remote-Host ControlMaster Auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker
1
Hoppla, ich habe gerade festgestellt, dass Sie vor dem ssh-agent-Anruf eine zusätzliche Bewertung benötigen. Ich habe meine Antwort oben aktualisiert
Tobi Oetiker
1
du könntest einen Alias ​​erstellen
Tobi Oetiker
2

Eine Alternative ist die Verwendung von Funtoos Schlüsselbund . Dann können Sie diesen Einzeiler in Ihre Bash-Hülle stecken:

eval $(keychain --eval id_rsa)

Das macht dasselbe (startet ssh agent, etc.), während auch nicht für jede Subshell ein ssh-agent-Prozess ausgeführt wird. Stattdessen sucht es nach "bereits laufenden" Instanzen, die Sie besitzen, und hängt Sie an diese an.

Erik Aronesty
quelle