Frage Einfacher Weg, ssh-agent und ssh-add bei der Anmeldung über SSH auszuführen?


Ich versuche, die folgenden Befehle automatisch auszuführen, wenn ich mich über ssh bei meinem Server anmelde:

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

Mein SSH-Schlüssel hat eine Passphrase und ich bin damit einverstanden, sie einmal pro Login einzugeben.

Ich habe versucht, dies in meine .bashrc-Datei zu setzen, aber ich glaube, dass ssh-agent eine neue Bash-Sitzung startet. Wenn ich versuche, mich einzuloggen, nachdem ich dies in meinem .bashrc habe, bleibt es hängen, und ich muss 'exit' eingeben, um dann die Eingabeaufforderung 'enter passphrace to unlock key' zu sehen

Irgendwelche anderen Vorschläge?

Auf dem Server läuft Ubuntu LTS


24
2018-03-02 01:57


Ursprung


Warum Schlüsselagent auf dem Server? Es sollte auf Ihrem lokalen sein Klient von dem du verbindest. - Zoredache
@Zoredache möchte ich tun können git pull und so auf dem Remote-Server - Click 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 war. Allerdings würde ich immer noch in der Lage sein, ssh-add / ssh-agent innerhalb eines bash-Skripts auszuführen, sogar von meinem lokalen Rechner aus. Es ist ein Schmerz, diese Befehle manuell ausführen zu müssen. - Click Upvote


Antworten:


versuche dies zu tun:

eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa

Auf diese Weise startet der ssh-agent keine neue Shell, sondern startet sich selbst im Hintergrund und spuckt die Shell-Befehle aus, um die entsprechenden Umgebungsvariablen zu setzen.

Wie im Kommentar gesagt, vielleicht tust du es nicht Ich möchte den Agent überhaupt auf dem Remote-Host ausführen, aber eher 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 nur Agent-Weiterleitungen mit Hosts verwenden, die von vertrauenswürdigen Personen ausgeführt werden, aber es ist besser, als einen vollständigen Agenten jederzeit remote auszuführen.


38
2018-03-02 07:50



Wenn ich ersetze ssh-agent /bin/bash mit ssh-agent -sund dann versuche ich es zu tun git pullIch werde immer noch nach der Passphrase des privaten Schlüssels gefragt, um sie zu entsperren. Das ist nicht wirklich das, was ich will, ich möchte nur die Passphrase eingeben müssen, um ssh-add zu machen, und muss es nicht jedes Mal wiederholen, wenn ich irgendwelche git-Befehle ausführe. Irgendwelche Ideen? - Click Upvote
und den Agenten lokal ausführen und ssh -A verwenden ist keine Option für Sie? Das Problem ist, dass Sie den ssh-Agenten nicht bei jeder Verbindung neu starten können. Jedesmal, wenn du es startest, weiß es "nichts" und wenn du den Schlüssel ssh hinzufügst, musst du es 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
oops gerade in bash realisierte sie eine extra eval vor dem ssh-agent call .. habe meine antwort oben aktualisiert - Tobi Oetiker
Sie könnten einen Alias ​​erstellen - Tobi Oetiker


Eine gute Alternative ist die Nutzung von Funtoo's Schlüsselbund. Dann kannst du diesen One-Liner in deine Bash Shell stecken:

eval `keychain --eval id_rsa

Das macht dasselbe (startet den ssh-Agenten usw.), während es auch keinen ssh-agent-Prozess für jede Untershell ausführt. Stattdessen sucht es nach "bereits laufenden" Instanzen, die Sie besitzen, und bindet Sie an sie.


0
2017-08-01 19:40