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-agent
wird 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 -A
die Änderung wirksam wird. Löschen Sie alle SSH-Verbindungsdateien in /tmp/[host]
.