Spraw, że mój klucz SSH chroniony hasłem wygaśnie lub upłynie limit czasu po pewnym czasie

12

Mam prywatny klucz SSH, którego używam do uwierzytelniania, który jest przechowywany w ~ / .ssh / id_rsa . Kiedy ssh do serwera, pojawia się monit o hasło do odblokowania klucza:

wprowadź opis zdjęcia tutaj

Lubię to. Podoba mi się również to, że mogę ssh raz po raz i nie monituje mnie o podanie hasła.

Nie podoba mi się to, że nie muszę wprowadzać hasła w ciągu kilku dni, a nawet tygodni. Mogę zablokować ekran lub go uśpić i nadal nie muszę wprowadzać hasła klucza. Hasło wydaje się wygasać tylko wtedy, gdy się wylogowuję (co rzadko robię).

Jak sprawić, aby hasło klucza wygasło po pewnym czasie, zmuszając mnie do ponownego wprowadzenia hasła w celu uwierzytelnienia? Sprawiając, że być może po 1 godzinie klucz zostanie automatycznie zapomniany.

Michael Kropat
źródło

Odpowiedzi:

4

Zamiast podkręcania ssh-agenta (który wymaga teraz niemałych ilości hakowania), zdecydowanie zalecamy po prostu zmianę ustawień domyślnego pęku kluczy (logowania). Używam bardzo pomocnej „blokady na sen”, jak również „blokady po 4 godzinach”, ponieważ nie chcę monitów, chyba że jestem w rzeczywistości.

Otwórz Dostęp do pęku kluczy i kliknij prawym przyciskiem myszy pęku kluczy logowania, aby zmienić ustawienia: Ustawienia bezpieczeństwa pęku kluczy

Lub jeśli wolisz wiersz poleceń:

security set-keychain-settings -lu -t 14400

Spowoduje to co najmniej jedno dodatkowe monitowanie o odblokowanie samego pęku kluczy (wymagającego hasła logowania), a także monit o podanie dowolnego klucza, którego próbujesz użyć ... ale to jest lepsze niż wyłączenie ochrony integralności systemu IMO.

Dave Gregory
źródło
To nie jest dla mnie opcja w El Capitan, a polecenie wiersza poleceń nie ma znaczenia, czy wiesz, czy jest gdzieś podobna opcja w El Capitan?
Ian
1
Jestem całkiem pewien, że mogłem to zrobić na El Cap - właśnie sprawdziłem i obie metody (interfejs użytkownika i cmdline) z pewnością nadal działają na Sierra. Mogę to jednak zrobić tylko przy użyciu pęku kluczy logowania, a nie Systemu i iCloud.
Dave Gregory
9

Uwaga : w nowszych wersjach systemu OS X należy wyłączyć ochronę integralności systemu, aby ta odpowiedź zadziałała. (Podziękowania dla @Dave Gregory i @Jaap za zwrócenie na to uwagi.)

Otwórz /System/Library/LaunchAgents/com.openssh.ssh-agent.plist(w starszych wersjach:) org.openbsd.ssh-agent.plistw edytorze tekstu. Zastąpić:

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

z:

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

Ten klucz wygasa po 30 minutach.

Restart. Czekaj, uruchom ponownie?!? To nie jest Windows! Tak, uruchom ponownie.

Możesz spróbować rozszyfrować instrukcje zmiany ustawienia w locie , ale powodzenia.

Michael Kropat
źródło
1
Pedant taki jak ja zamieniłby „1800” na „30m”, ponieważ ułatwia to czytanie. Zobacz FORMATY CZASU w sshd_config (8), aby uzyskać pełny format.
Tony Williams
@ Tony Williams spoko! naprawiono
Michael Kropat
Wydaje się, że to nie działa dla mnie w Yosemite; ktoś jeszcze?
Dave Gregory
Znalazłem obejście na Yosemite, które nie obejmuje wyłączania ochrony integralności systemu; dodano jako odpowiedź poniżej.
Dave Gregory
1
Dzięki za informacje @Jaap. Obecnie nie używam OS-X, więc nie mogę niczego zweryfikować osobiście, ale starając się być dobrym zarządcą tego pytania i odpowiedzi zaktualizowałem odpowiedź na podstawie twoich informacji i zmieniłem akceptowaną odpowiedź na Dave'a Gregory'ego ponieważ wyłączenie ochrony integralności systemu w wielu przypadkach wydaje się niewskazane.
Michael Kropat
7

Musisz ustawić żywotność klucza. Zwykle domyślnie jest ustawiony na zawsze.

Po uruchomieniu ssh-addchcesz użyć tej -topcji. Jeśli chcesz mieć kluczowe życie na godzinę, to jest ssh-add -t 1h. Formaty czasu można zobaczyć na sshd_configstronie podręcznika, ale po prostu są to liczby, po których następują s, m, h, d lub w przez sekundy, minuty, godziny, dni lub tygodnie.

ssh-addmożna umieścić w pliku .bashrc, a poprosi Cię o jednokrotne sprawdzenie klucza. Nawet gdy klucz „wygasa”, nie jest usuwany - po prostu prosi o podanie hasła, gdy próbuje się go użyć.

Inną opcją byłoby zmienić opcje uruchamiania, dla ssh-agentktórych są przechowywane /System/Library/LaunchAgents/org.openbsd.ssh-agent.plisti dodać je -t. (Używam ich LaunchControldo zmiany, ale możesz to zrobić ręcznie, jeśli jesteś ostrożny.)

Tony Williams
źródło
Wolałbym nie pamiętać, aby uruchamiać ssh-addręcznie przed sshkażdym uruchomieniem . To ciekawe, ale naprawdę szukam czegoś automatycznego.
Michael Kropat
+1 dzięki za wskazanie mi org.openbsd.ssh-agent.plistrozwiązania
Michael Kropat
1

Innym rozwiązaniem jest:

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.

Dzięki temu rozwiązaniu nie musisz wybierać limitu czasu dla całego pęku kluczy - dość denerwujące, gdy chcesz ustawić limit czasu na rejestrowanie hasła klucza prywatnego - i nie musisz wyłączać SIP w celu edycji / System / Biblioteka / LaunchAgents / org.openbsd.ssh-agent.plist.

symsymmy
źródło