Lassen Sie meinen passwortgeschützten SSH-Schlüssel nach einer Weile ablaufen oder eine Zeitüberschreitung auftreten


12

Ich habe einen privaten SSH-Schlüssel, den ich zur Authentifizierung verwende und der in ~ / .ssh / id_rsa gespeichert ist . Wenn ich auf einen Server ssh, werde ich aufgefordert, das Kennwort einzugeben, um den Schlüssel zu entsperren:

Geben Sie hier die Bildbeschreibung ein

Ich mag das. Ich mag auch, dass ich immer wieder ssh kann und es mich nicht zur Eingabe meines Passworts auffordert.

Was mir nicht gefällt, ist, dass ich Tage oder sogar Wochen später kein Schlüsselpasswort eingeben muss. Ich kann meinen Bildschirm sperren oder in den Ruhezustand versetzen und muss trotzdem mein Schlüsselkennwort nicht eingeben. Das Passwort scheint nur dann abzulaufen, wenn ich mich abmelde (was ich selten mache).

Wie kann ich erreichen, dass das Schlüsselkennwort nach einer Weile abläuft und ich gezwungen werde, mein Kennwort zur Authentifizierung erneut einzugeben? Damit ist es möglich, dass der Schlüssel nach 1 Stunde automatisch vergessen wird.

Antworten:


4

Anstatt ssh-agent zu optimieren (was jetzt albernes Hacken erfordert), empfehle ich dringend, einfach die Einstellungen Ihres Standard-Schlüsselbunds (Login) zu ändern. Ich verwende die sehr hilfreiche Option "Sperre für den Schlaf" sowie "Sperre nach 4 Stunden", da ich keine Eingabeaufforderungen möchte, es sei denn, ich bin tatsächlich afk.

Öffnen Sie den Schlüsselbundzugriff und klicken Sie mit der rechten Maustaste auf den Anmeldeschlüsselbund, um die Einstellungen zu ändern: Schlüsselbund-Sicherheitseinstellungen

Oder wenn Sie eine Befehlszeile bevorzugen:

security set-keychain-settings -lu -t 14400

Dies führt zu mindestens einer zusätzlichen Eingabeaufforderung zum Entsperren des Schlüsselbunds selbst (für die Ihr Anmeldekennwort erforderlich ist) sowie zur Eingabeaufforderung für den Schlüssel, den Sie verwenden möchten. Es ist jedoch besser, die Systemintegritätsschutz-IMO zu deaktivieren.


Dies ist für mich keine Option in El Capitan, und der Befehlszeilenbefehl scheint keinen Unterschied zu machen. Wissen Sie, ob es in El Capitan irgendwo eine ähnliche Option gibt?
Ian

1
Ich bin mir ziemlich sicher, dass ich dies auf El Cap tun konnte - ich habe es gerade überprüft und beide Methoden (UI und cmdline) funktionieren auf jeden Fall immer noch auf Sierra. Ich kann dies jedoch nur über den Login-Schlüsselbund tun, nicht über System oder iCloud.
Dave Gregory

9

Hinweis : In neueren Versionen von OS X müssen Sie den Systemintegritätsschutz deaktivieren, damit diese Antwort funktioniert. (Vielen Dank an @Dave Gregory und @Jaap für diesen Hinweis.)

Öffnen Sie /System/Library/LaunchAgents/com.openssh.ssh-agent.plist(in älteren Versionen :) org.openbsd.ssh-agent.plistin einem Texteditor. Ersetzen:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
</array>

mit:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
    <string>-t</string>
    <string>30m</string>
</array>

Der Schlüssel läuft nach 30 Minuten ab.

Starten Sie neu. Warten Sie, starten Sie neu?!? Das ist nicht Windows! Ja, neu starten.

Nun, Sie können versuchen, die Anweisungen zum Ändern der Einstellung im laufenden Betrieb zu entschlüsseln , aber viel Glück.


1
Ein Pedant wie ich würde das "1800" durch "30m" ersetzen, da es das Lesen etwas erleichtert. Das vollständige Format finden Sie unter ZEITFORMATE in sshd_config (8).
Tony Williams

@ Tony Williams cool! behoben
Michael Kropat

Bei Yosemite scheint das bei mir nicht zu funktionieren. irgendjemand anderes?
Dave Gregory

Ich habe eine Problemumgehung für Yosemite gefunden, bei der der Systemintegritätsschutz nicht deaktiviert wird. als Antwort unten hinzugefügt.
Dave Gregory

1
Danke für die Info @Jaap. Ich verwende OS-X derzeit nicht täglich, daher kann ich nichts persönlich überprüfen. Um jedoch zu versuchen, ein guter Verwalter dieser Fragen und Antworten zu sein, habe ich meine Antwort basierend auf Ihren Informationen aktualisiert und die akzeptierte Antwort in Dave Gregorys geändert da das Deaktivieren des Systemintegritätsschutzes in vielen Fällen nicht ratsam erscheint.
Michael Kropat

7

Sie müssen die Lebensdauer des Schlüssels festlegen. Normalerweise ist es standardmäßig für immer.

Wenn Sie ausführen ssh-add, möchten Sie die -tOption verwenden. Wenn Sie eine Schlüssellebensdauer von einer Stunde wünschen, ist dies der Fall ssh-add -t 1h. Die Zeitformate sind auf der sshd_configManpage zu sehen, aber einfach ausgedrückt sind sie eine Zahl, gefolgt von s, m, h, d oder w für Sekunden, Minuten, Stunden, Tage oder Wochen.

ssh-addkann in Ihre .bashrc-Datei eingefügt werden und fordert Sie lediglich auf, den Schlüssel einmal zu validieren. Selbst wenn der Schlüssel "abläuft", wird er nicht entfernt - er fragt nur erneut nach der Passphrase, wenn versucht wird, sie zu verwenden.

Die andere Option wäre, die Startoptionen zu ändern, für ssh-agentdie sie gespeichert sind, /System/Library/LaunchAgents/org.openbsd.ssh-agent.plistund die -tdort hinzuzufügen . (Ich verwende LaunchControldiese, um sie zu ändern, aber Sie können es von Hand tun, wenn Sie vorsichtig sind.)


Ich möchte lieber nicht daran denken, ssh-addmanuell zu laufen, bevor ich sshjedes Mal laufe . Es ist interessant, aber ich suche wirklich etwas Automatisches.
Michael Kropat

+1 danke, dass Sie mich auf die org.openbsd.ssh-agent.plistLösung hingewiesen haben
Michael Kropat

1

Eine andere Lösung ist:

ssh-add -t <time> <ssh-private-key>  # Set maximum lifetime to your SSH priv key.
killall ssh-agent                    # Kill all ssh-agent processes.
ssh-add -D                           # Delete all identities recorded by the agent.

Mit dieser Lösung müssen Sie kein Zeitlimit für Ihren gesamten Schlüsselbund auswählen - ziemlich ärgerlich, wenn Sie ein Zeitlimit von einigen Sekunden für die Aufzeichnung Ihres privaten Schlüsselkennworts festlegen möchten - und Sie müssen Ihr SIP nicht deaktivieren, um / System / zu bearbeiten. Library / LaunchAgents / org.openbsd.ssh-agent.plist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.