Czy istnieje techniczny powód, dla którego ssh-agent nie ma funkcji sudo bezczynności / limitu czasu bezczynności?

9

Trwa krótka dyskusja na temat istniejącej ssh-agent -tfunkcji w [1], a już w 2001 r. Pojawił się post na temat debian-devel [2], który pragnąłby funkcji limitu czasu braku aktywności. Podobna dyskusja tutaj na SE [3] dla widowiska.

Muszę się zastanawiać, jak reszta planety chroni klucze ssh - czy brakuje mi czegoś oczywistego, aby był to dla mnie taki problem i najwyraźniej nikt inny? W szczególności myślę o skryptowych interakcjach ssh, na przykład z ansible. Wygląda na to, że dzisiaj masz do wyboru:

  • Ustaw czas życia swojego klucza w agencie na niepokojąco długi okres, np. Może się zdarzyć, że będzie to 1 godzina lub jakikolwiek maksymalny czas działania twoich skryptów (wątpię, aby wiele osób zezwoliło na przedłużenie limitu czasu ponownego uruchomienia sudo tak długo!) - ale seahorse/ gnome-keyring-daemonledwo nawet tak bardzo wspiera [4]
  • Spójrz na swoje długo działające skrypty i ponownie wprowadzaj hasło co 5/10/15 minut: teraz możesz łatwo obserwować wprowadzanie hasła 20 razy dziennie
  • Zhakuj własne rozwiązanie do parzenia domowego, aby naśladować tę brakującą funkcję, być może w połączeniu z powłoką TMOUTpowłoki powłoki (dziękuję ludziom za freenode #openssh IRC za tę sugestię)
  • W ogóle nie ustawiono okresu istnienia klucza, tzn. Agent utrzymuje klucz wczytywany na zawsze lub do momentu zabicia / ponownego uruchomienia komputera

Jeśli używasz krótkich limitów czasu agenta ssh, silnych haseł i różnych plików kluczy dla każdego rodzaju roli, którą uwierzytelniasz jako: prowadzi to do bardzo frustrującego dnia!

Eksperymentowałem z gpgkey2ssh i kartami inteligentnymi, ale to tak naprawdę nie rozwiązuje tego konkretnego problemu: nadal chcę funkcjonalność ssh-agent i nie chcę ponownie uwierzytelniać co 5 minut, aby zapobiec ujawnieniu moich kluczy prywatnych w pamięci, gdy mój komputer jest bezczynny.

Czy robię to źle?

[1] Konfigurowanie domyślnego limitu czasu dla agenta SSH

[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
źródło
1
Nie jest to odpowiedź, ale tak, istnieją pewne techniczne wyzwania związane z wykrywaniem nieaktywności sesji, gdy ssh-agentjest ona niezależna od typu sesji, w której jest częścią (np. Sesja tty, sesja X11 lub coś innego). Jedno chciałbym powiedzieć, jeśli twoje zautomatyzowane skrypty prawdopodobnie nie powinny zależeć od klucza załadowanego do twojego agenta. Prawdopodobnie każdy powinien mieć swój własny klucz prywatny, który jest autoryzowany za pomocą poleceń wymuszonych na odpowiednich serwerach, aby uruchamiać tylko określone polecenia zdalne, które musi uruchomić każdy skrypt. To oczywiście pozwoli ci uruchomić te z crona itp.
Celada
Nie oczekuję, ssh-agentaby wiedzieć, kiedy sesja jest nieaktywna, ale przynajmniej zacznij limit czasu od momentu wystąpienia ostatniej operacji podpisywania, a nie tylko od momentu ssh-agenturuchomienia. Ponadto używam już osobnych kont użytkowników i plików kluczy dla każdej roli skryptu, sudoers pozwala na sudo tylko 1 lub 2 polecenia, jeśli to konieczne, i starałem się to lshelldalej blokować. Ale to wszystko nadal nie zwalnia mnie z konieczności ochrony moich plików kluczy: tylko dlatego, sudo zfs sendże jedyne polecenie jest dozwolone dla danego klucza, to dość potężne polecenie dla każdego, kto włada tym kluczem!
csirac2
Kolejne obejście: użyj opcji ControlMaster/ ControlPath/ ControlPersist(patrz man ssh_config) dla swojego skryptu. Przynajmniej jeśli łączy się tylko z jednym hostem.
derobert
To ciekawa sugestia i nauczyła mnie czegoś (dzięki!), Ale wydaje się, że niczego nie rozwiązuje, jeśli nadal będę mieć ssh-agentzaładowane klucze do momentu ponownego uruchomienia (co może być tygodniami).
csirac2

Odpowiedzi:

2

Jeśli dotyczy to Ciebie, możesz łatwo użyć xscreensaver-command -watchinterfejsu do uruchomienia, ssh-add -Dgdy ekran jest zablokowany. Sprawdź stronę podręcznika dla bardzo prostego przykładu.

Marco d'Itri
źródło