Czy można używać klucza SSH z pustym hasłem?

34

Kiedy po raz pierwszy nauczyłem się robić klucze ssh, wszystkie samouczki, które przeczytałem, stwierdzały, że należy wybrać dobre hasło. Ale ostatnio, konfigurując proces demona, który musi ssh na innym komputerze, odkryłem, że jedynym sposobem (jak się wydaje) posiadaniem klucza, którego nie muszę uwierzytelniać przy każdym uruchomieniu, jest utworzenie klucza z pustym hasło. Moje pytanie brzmi: jakie są obawy związane z używaniem klucza bez hasła?

mozillalives
źródło

Odpowiedzi:

38

Klucz bez hasła jest zależny od tego, że nikt inny nie jest w stanie uzyskać tego klucza (kto i tak nie byłby w stanie uzyskać dostępu do zasobów, do których daje dostęp). Tak więc, jeśli klucz zapewnia dostęp do sąsiedniej maszyny, a obie maszyny mają ten sam poziom bezpieczeństwa elektronicznego i fizycznego, to nie jest to żadna wielka sprawa.

Z drugiej strony, jeśli twój klucz znajduje się na maszynie o słabym bezpieczeństwie (być może ma wielu niezaufanych użytkowników, jest łatwo dostępny fizycznie lub nie jest odpowiednio aktualizowany przy użyciu swojego systemu poprawiania), prawdopodobnie nie „ nie chcę mieć kluczy bez hasła.

Ostatecznie zależy to od zaufania do konfiguracji i oceny ryzyka / kosztów związanych z jej wykonaniem - jeśli możesz być całkiem pewny, że atakującemu nie jest łatwiej uzyskać dostęp do klucza niż do zasobu, do którego klucz daje dostęp , więc nic ci nie jest. Jeśli nie masz takiej pewności, prawdopodobnie powinieneś naprawić powody :)

Mo.
źródło
Tylko zaufani ludzie będą mieli dostęp do maszyny za pomocą kluczy, więc myślę, że to odpowiada na moje pytanie. Dzięki.
mozillalives
11

inne rozwiązanie, zwiększające bezpieczeństwo i ułatwiające ci pracę, dzięki czemu nie musisz cały czas wpisywać hasła:

jeśli chcesz zaszyfrować swój klucz prywatny, możesz użyć ssh-agentna stacji roboczej do „buforowania” niezaszyfrowanego klucza. gdy chcesz przechowywać odszyfrowany klucz, uruchom ssh-add ~/.ssh/id_rsalub jakikolwiek inny klucz prywatny. zostaniesz poproszony o podanie hasła, a odszyfrowany klucz będzie dostępny dla połączeń ssh, dopóki nie wylogujesz się, nie zabijesz ssh-agentlub nie zamkniesz systemu.

możesz killprzechowywać zapisane klucze za pomocą ssh-agent -ki możesz przypisać dożywotni czas dla klucza, który ma być w pamięci ssh-agent -t [seconds], na przykład; jeśli nie chcesz, aby Twój klucz był odszyfrowany na zawsze, ale chcesz dużo sshingować wokół hostów, możesz ustawić limit czasu na 5-10 minut. więc nie musisz ciągle wprowadzać hasła swojego klucza.

znowu, wszystko to ma związek z tym, jak jesteś pewny bezpieczeństwa swojego / stacji roboczej /, który, jeśli jesteś jedynym, który ma do niego dostęp i masz dość bezpieczne hasło lokalne, a ty nie zapraszaj na siebie exploity i rootkity, twój klucz prywatny bez hasła jest dość bezpieczny.

jeśli jesteś podobny do mnie i trzymasz swój klucz prywatny na pendrivie, na pewno będziesz chciał go zaszyfrować, nawet jeśli jest to tylko klucz prywatny (osobny, z którego korzystam na mojej stacji roboczej, więc jeśli zgubiłem klucz, mogę z łatwością usunąć klucz publiczny z pendrive'a z ~/.ssh/authorized_keyslisty mojego serwera , co również powoduje / doskonały / powód dodawania PRZYDATNYCH komentarzy do twoich kluczy publicznych)

w odpowiedzi na poprzednią odpowiedź powiedziałeś, że tylko osoby, którym ufasz, mają dostęp do komputera za pomocą kluczy. Chcę tylko wyjaśnić, że Twój klucz prywatny NIE musi znajdować się na serwerze, z którym się łączysz, w przypadku, gdy to robisz. tylko twój klucz publiczny musi znajdować się na serwerze, i to nie jest problem, dlatego jest to klucz „publiczny”.

och, zapomniałem wspomnieć; uruchamiam ssh-agentpo uruchomieniu X, w przeciwnym razie odszyfrowane klucze, które przechowuję, ssh-addnie są zachowywane przez różne xtermsesje i muszę ponownie wprowadzić hasło za każdym razem, gdy zamykam xtermuruchamiane ssh-addw. w moim ~/.xinitrcpliku mam:

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi

Mam wezwanie do ssh-agentzawinięcia, evalponieważ ssh-agent zwraca niektóre zmienne środowiskowe, które muszą zostać ustawione podczas działania, i uruchomić ~/.xinitrc, zmienne środowiskowe są stałe podczas sesji X.

cpbills
źródło
Tak - wiem, że muszę tylko załadować klucz publiczny. Po prostu łączę jeden serwer z drugim i dlatego o tym wspomniałem. Ale dziękuję za napisanie tej jasnej i przemyślanej odpowiedzi.
mozillalives
cóż, jeśli go użyjesz ssh-agenti użyjesz ssh -A -i privkey user@host, pozwoli on na przekazywanie agentów ssh, co umożliwi ci dostęp do serwera z serwera początkowego, bez umieszczania twojego klucza prywatnego na pierwszym serwerze. Tworzenie łańcuchów ssh nie jest zalecane, nawet bez włączonego przekazywania kluczy ssh, i ssh -Ama swoje własne obawy dotyczące bezpieczeństwa. nie ma powodu, dla którego klucz na serwerze nie może być zaszyfrowany, podczas gdy klucz na stacji roboczej jest pozbawiony hasła.
cpbills
3

Możesz spojrzeć na podobne pytanie, które zadałem na temat prywatnych kluczy SSL dla serwerów sieciowych. Zasadniczo istnieją trzy opcje:

  1. Chroń klucz za pomocą perms systemu plików.
  2. Użyj klucza chronionego hasłem i wprowadź klucz ręcznie przy każdym ponownym uruchomieniu.
  3. Użyj klucza chronionego hasłem i zapisz klucz w systemie plików, aby zautomatyzować ponowne uruchomienie.

Każdy z nich jest wadliwy, więc wszystko zależy od tego, czego najbardziej się boisz.

chmeee
źródło
1

W celu zautomatyzowanego dostępu, który, jak mówisz, wymaga kluczy pozbawionych hasła, zawsze używam dodatkowych opcji uprawnionych kluczy (patrz sshd (8)), aby ograniczyć polecenie, które można uruchomić.

Zazwyczaj dostarczam starannie napisany skrypt na odległym końcu, który wykonuje dokładnie zadanie (lub zadania - może patrzeć na parametry), które chcę mieć dozwolone.

Następnie zamykam go również na adresy IP, które mogą łączyć się z tym kluczem (nie w 100% niezawodny, ale również z ograniczeniem poleceń).

jrg
źródło
Znakomity punkt - jeśli uznasz, że konieczne jest użycie niechronionych kluczy, najlepszą rzeczą, jaką możesz zrobić, to zablokować go!
MikeyB,
1

Tak długo, jak nikt inny niż ty nie ma dostępu do klucza, nie potrzebujesz hasła. W rzeczywistości nie można użyć hasła do kluczy używanych przez zautomatyzowane oprogramowanie.

Fahad Sadah
źródło
0

Jeśli chcesz użyć ssh do wykonania jakiejkolwiek zautomatyzowanej procedury - myślę konkretnie o czekach Nagios - prawdopodobnie nie chciałbyś użyć hasła.

W tej sytuacji prawdopodobnie nie używałbyś tego poza siecią LAN, a klucz byłby bezpiecznie przechowywany na serwerze wykonującym tę procedurę.

Większość samouczków omawiających SSH przewiduje, że osoba zaloguje się z sieci zewnętrznej, być może z niezabezpieczonego komputera, w którym to przypadku rada jest słuszna.

Zasadniczo, chyba że wiesz, że istnieje dobry powód, aby tego nie robić, utwórz hasło. Zbyt leniwy, aby za każdym razem wpisywać hasło, może być dla Ciebie wystarczającym powodem :-)

dunxd
źródło
Nawet jeśli logują się z sieci zewnętrznej, co to robi różnicę? Liczy się tylko bezpieczeństwo komputera klienckiego, hasło jest obsługiwane po stronie klienta, prawda?
njsg
Dopóki laptop klienta nie zostanie skradziony i wykorzystany do naruszenia jego obwodu, zanim ktokolwiek będzie miał szansę cofnąć klucz SSH. Hasło na kluczu dałoby ci więcej czasu na odwołanie kluczy.
dunxd
Tak jak powiedziałem: „liczy się tylko bezpieczeństwo komputera klienckiego”.
njsg