Einfache Möglichkeit, SSH-Agent und SSH-Add beim Anmelden über SSH auszuführen?

Einfache Möglichkeit, SSH-Agent und SSH-Add beim Anmelden über SSH auszuführen?

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

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

Mein SSH-Schlüssel hat eine Passphrase und es reicht mir, diese einmal bei jeder Anmeldung einzugeben.

Ich habe versucht, dies in meine .bashrc-Datei einzufügen, aber ich glaube, dass ssh-agent eine neue Bash-Sitzung startet. Wenn ich versuche, mich anzumelden, nachdem ich dies in meiner .bashrc-Datei habe, bleibt es hängen und ich muss „exit“ eingeben, um dann die Eingabeaufforderung „Passphrase zum Entsperren des Schlüssels eingeben“ zu sehen.

Irgendwelche anderen Vorschläge?

Auf dem Server läuft Ubuntu LTS

Antwort1

Sie können versuchen, Folgendes hinzuzufügen:

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

Auf diese Weise ssh-agentwird keine neue Shell gestartet, sondern es wird einfach im Hintergrund ausgeführt und es werden die Shell-Befehle zum Festlegen der entsprechenden Umgebungsvariablen ausgegeben.

Wie im Kommentar gesagt, vielleichtnichtSie möchten den Agenten 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 bei Hosts verwenden, die von vertrauenswürdigen Personen betrieben werden. Es ist jedoch immer besser, als einen kompletten Agenten remote auszuführen.

Antwort2

Eine andere Alternative besteht darin, dies zu Ihrer .bashrc hinzuzufügen. Dies hat den gleichen Vorteil wie Eriks Antwort (Gewährleistung einer einzelnen Instanz), erfordert jedoch kein zusätzliches Paket.

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
fi

Dies führt ssh-add aus, wenn nicht mindestens 1 Schlüssel geladen ist, und legt ein Schlüssel-Timeout von 1 Tag fest:

ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
     echo Adding keys...
     ssh-add -t 1d
fi

Antwort3

Eine Alternative ist die Verwendung von FuntooSchlüsselanhänger. Dann können Sie diesen Einzeiler in Ihre Bash-Shell einfügen:

eval $(keychain --eval id_rsa)

Das macht dasselbe (startet den SSH-Agenten usw.), führt aber auch keinen SSH-Agenten-Prozess für jede Subshell aus. Stattdessen sucht es nach „bereits laufenden“ Instanzen, die Sie besitzen, und verbindet Sie mit ihnen.

Antwort4

Denken Sie auch daran, dass Sie, wenn Sie eine SSH-Verbindung mit Keep-Alive-Funktion haben, vorhandene Verbindungsdateien löschen müssen, bevor -Adie Änderung wirksam wird. Löschen Sie alle SSH-Verbindungsdateien in /tmp/[host].

verwandte Informationen