Ich möchte ssh-agent ausführen (mit der Option "Maximale Lebensdauer"), aber beim Start keine Schlüssel hinzufügen, sondern sie bei Bedarf hinzufügen.
Wenn ich mich zum ersten Mal bei einem Server anmelde, sollte er beim nächsten Mal nach der Passphrase fragen (es sei denn, ich habe länger als eine Stunde gewartet), und die Verbindung sollte sauber hergestellt werden:
ssh server1
Enter passphrase for key '/home/vi/.ssh/id_dsa':
server1> ...
ssh server2
server2> # no passphrase this time
# wait for lifetime
ssh server2
Enter passphrase for key '/home/vi/.ssh/id_dsa':
Ich möchte nicht jedes Mal manuell daran denken, 'ssh-add' auszuführen. (zB eingegebene Passphrase für nur für ssh und "Oh, es hat sich nicht erinnert, muss neu eingegeben werden").
Wie konfiguriere ich ssh so, dass der Schlüssel automatisch zu ssh-agent hinzugefügt wird, wenn der Benutzer die Passphrase angegeben hat?
Antworten:
ssh unterstützt das Hinzufügen eines Schlüssels zum Agenten bei der ersten Verwendung (seit Version 7.2). Sie können diese Funktion aktivieren, indem Sie Folgendes eingeben
~/.ssh/config
:Dies funktioniert auch, wenn abgeleitete Tools wie git verwendet werden.
Aus dem 7.2 Changelog :
quelle
Sie könnten schummeln und etwas
alias ssh='ssh-add -l || ssh-add && ssh'
auf Ihr.bashrc
/ setzen.profile
. Dieser erste Laufssh-add -l
kann 0 (es sind Schlüssel auf dem Agenten vorhanden), 1 (keine Schlüssel) oder 2 (kein Agent läuft) zurückgeben. Wenn es 0 zurückgibt,ssh
wird ausgeführt. Wenn 1,ssh-add
wird ausgeführt und dannssh
; Wenn 2,ssh-add
wird fehlschlagen undssh
nicht ausgeführt. Ersetzen Sie das&&
durch,;
wenn Siessh
ausführen möchten , auch wenn kein Agent ausgeführt wird.quelle
alias ssh-hostname='(ssh-add -l | grep hostname > /dev/null) || ssh-add ~/.ssh/id_rsa_hostname && ssh -p 12345 username@hostname'
. Sie können dies sogar in eine Schleife für alle Ihre ssh-Schlüssel einfügen und Aliase generieren. Ein dreckiger Hack, aber es funktioniert.Bis auto-call-ssh-add von ssh unterstützt wird, habe ich dies in meinem
.bashrc
, auf Kovensky basierenden Vorschlag hinzugefügt:Der Alias wird nur erstellt, wenn die Identität nicht hinzugefügt wird und der Alias sich selbst zerstört, sobald er ausgeführt wird.
Auf diese Weise wird der reguläre Befehl ssh verwendet, nachdem die Identität hinzugefügt wurde.
quelle
ssh-add -t ...
) verschwindet der zu ssh-agent hinzugefügte Schlüssel möglicherweise abrupt, und der Alias bleibt bestehen, da sich der Schlüssel noch im Speicher befindet.Ich benutze die folgende Shell-Funktion:
Zunächst wird die Konfiguration für den Host, zu dem ich eine Verbindung herstellen möchte, aufgelöst. Anschließend werden dem ssh-agent mögliche Schlüssel für diesen Host hinzugefügt, sofern diese noch nicht hinzugefügt wurden, und schließlich wird eine Verbindung zum Host hergestellt. Ich bin sicher, dass es verbessert werden kann, also bin ich offen für Feedback.
quelle