Gibt es einen technischen Grund, warum ssh-agent keine sudo-ähnliche Inaktivitäts- / Leerlauf-Timeout-Funktion hat?

9

Es gibt einige kurze Diskussionen über das vorhandene ssh-agent -tFeature in [1], und es gab bereits 2001 einen Beitrag über Debian-Devel [2], in dem ein Inaktivitäts-Timeout-Feature gewünscht wurde. Es gibt hier eine ähnliche Diskussion über SE [3] für Festzüge.

Ich muss mich fragen, wie der Rest des Planeten SSH-Schlüssel schützt - fehlt mir etwas Offensichtliches, damit dies für mich und anscheinend für niemanden anderen ein Schmerzpunkt ist? Insbesondere denke ich an ssh-Interaktionen mit Skripten, beispielsweise mit ansible. Es scheint, dass Sie heute folgende Entscheidungen treffen können:

  • Stellen Sie die Lebensdauer Ihres Schlüssels im Agenten auf einen besorgniserregend langen Zeitraum ein, z. 1 Stunde oder was auch immer die maximale Laufzeit Ihrer Skripte sein mag (ich bezweifle, dass viele Leute zulassen, dass sich das Zeitlimit für die Sudo-Neuauthentifizierung so lange verlängert!) - aber seahorse/ unterstützen Sie gnome-keyring-daemonkaum so viel [4]
  • Babysitten Sie Ihre lang laufenden Skripte und geben Sie Ihre Passphrase alle 5/10/15 Minuten erneut ein: Jetzt können Sie ganz einfach beobachten, wie Sie Ihre Passphrase 20 Mal am Tag eingeben
  • Hacken Sie Ihre eigene Home-Brew-Lösung, um diese fehlende Funktion nachzuahmen, möglicherweise in Verbindung mit der Shell- TMOUTVar Ihrer Shell (danke an freenode #openssh IRC für diesen Vorschlag).
  • Sie haben überhaupt keine Schlüssellebensdauer festgelegt, dh Ihr Agent hält Ihren Schlüssel für immer geladen oder bis Sie ihn beenden / neu starten

Wenn Sie kurze Timeouts für SSH-Agenten, starke Passphrasen und unterschiedliche Schlüsseldateien für jede Art von Rolle verwenden, als die Sie sich authentifizieren: Dies führt zu einem sehr frustrierenden Tag!

Ich habe mit gpgkey2ssh und Smartcards experimentiert, aber dies löst dieses spezielle Problem nicht wirklich: Ich möchte immer noch die ssh-agent-Funktionalität und möchte nicht alle 5 Minuten neu authentifizieren müssen, um zu verhindern, dass meine privaten Schlüssel verfügbar gemacht werden im Speicher, während mein Computer inaktiv ist.

Mache ich es falsch

[1] Konfigurieren des Standardzeitlimits für den SSH-Agenten

[2] https://lists.debian.org/debian-devel/2001/09/msg00851.html

[3] /server/518312/putty-pageant-forget-keys-after-period-of-inactivity

[4] https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/129231

csirac2
quelle
1
Keine Antwort, aber ja, es gibt einige technische Herausforderungen bei der Erkennung von Sitzungsinaktivität, wenn diese ssh-agentunabhängig von der Art der Sitzung ist, zu der sie gehört (z. B. tty-Sitzung, X11-Sitzung oder etwas anderes). Das einzige, was ich sagen möchte , wenn Ihre automatisierten Skripte wahrscheinlich nicht von dem in Ihrem Agenten geladenen Schlüssel abhängen sollten. Sie sollten wahrscheinlich jeweils einen eigenen privaten Schlüssel haben, der über erzwungene Befehle auf den entsprechenden Servern autorisiert ist, nur die spezifischen Remote-Befehle auszuführen, die jedes Skript ausführen muss. Das würde Sie natürlich die von cron etc laufen lassen ...
Celada
Ich erwarte nicht ssh-agentzu wissen, wann eine Sitzung inaktiv ist, aber ssh-agentstarte das Timeout zumindest ab dem Zeitpunkt, zu dem der letzte Signaturvorgang stattgefunden hat, nicht nur, wann immer er gestartet wurde. Außerdem verwende ich bereits separate Benutzerkonten und Schlüsseldateien für jede Skriptrolle. Sudoers lässt zu, dass bei Bedarf nur 1 oder 2 Befehle sudo ausgeführt werden, und ich habe versucht, die lshellDinge weiter zu sperren. Aber all das befreit mich immer noch nicht davon, meine Schlüsseldateien schützen zu müssen: Nur weil sudo zfs sendder einzige Befehl für einen bestimmten Schlüssel zulässig ist, ist dies ein ziemlich mächtiger Befehl für jeden, der diesen Schlüssel verwendet!
csirac2
Eine weitere Problemumgehung: Verwenden Sie die Optionen ControlMaster/ ControlPath/ ControlPersist(siehe man ssh_config) für Ihr Skript. Zumindest, wenn nur eine Verbindung zu einem Host hergestellt wird.
Derobert
Das ist ein interessanter Vorschlag und hat mir etwas beigebracht (danke!), Scheint aber nichts zu lösen, wenn ich ssh-agentmeine Schlüssel noch geladen habe, bis ich neu starte (was Wochen dauern kann).
csirac2

Antworten:

2

Wenn Sie diesbezüglich Bedenken haben, können Sie die xscreensaver-command -watchBenutzeroberfläche problemlos verwenden , um sie auszuführen, ssh-add -Dwenn der Bildschirm gesperrt ist. In der Manpage finden Sie ein sehr einfaches Beispiel.

Marco d'Itri
quelle