Porady dotyczące zarządzania kluczami SSH

13

Jaka jest najlepsza praktyka, jaką znalazłeś w zarządzaniu wieloma kluczami SSH?

Używam SSH do łączenia się z kilkoma systemami, zarówno w domu, jak iw pracy. Obecnie mam dość niewielką, łatwą do zarządzania kolekcję kluczy kluczowych zarówno do pracy, jak i do systemów domowych. Mam skrypt, który generuje nazwaną parę kluczy, dzięki czemu mogę uniknąć pomyłek.

Moja sieć domowa składa się z mojego laptopa (ubuntu), dwóch komputerów stacjonarnych (podwójny rozruch ubuntu / fedora, podwójny rozruch fedora / windows) i systemu multimediów (ubuntu). W pracy mam osobistego laptopa (którego używam do pracy w domu), komputer stacjonarny (fedora), system produkcyjny (RHEL) oraz laptop z systemem Windows (westchnienie) i maszyną wirtualną (fedora). Jak dotąd wszystko dobrze.

(Nie jestem zainteresowany ani umieszczeniem pary kluczy domowych w systemie roboczym, ani kluczy roboczych w moich systemach domowych. Mamy też wirtualne konta użytkowników, aby zmechanizować przesyłanie plików w innych systemach, w których klucz prywatny musi znajdować się na komputerze produkcyjnym, przesyłać pliki między innymi systemami).

Ale teraz pojawia się Hadoop, duży klaster ponad 100 systemów, z tą większą złożonością, większą liczbą użytkowników i większą liczbą kluczy. Teraz muszę zarządzać kluczami.

(Muszę wyjaśnić. Jestem programistą konsultującym się z klientem wdrażającym klaster Hadoop. Muszą oni zarządzać kluczami. Dostęp do klastra będzie miało wielu ludzi, którzy będą musieli umieścić swoje klucze publiczne w systemie. Jako rezydent Specjalista od Linuksa poprosił mnie o pomoc. Doradziłem zatrudnienie administratora systemu, ale dopóki tego nie zrobię, pomagam)

Kiedy muszę opublikować klucz publiczny w systemie zdalnym, wszystkie strony z instrukcjami sugerują albo nadpisać (>) (niszczenie istniejących kluczy), albo dołączyć (>>) (co jest dobre, zachowuje istniejące klucze) . Myślę jednak, że osobne przechowywanie każdego klucza publicznego na maszynie docelowej byłoby lepsze. Szukam porady.

Jaka jest najlepsza metoda zarządzania wieloma kluczami?

Dziękuję Ci!


Edycja: Jednym z aspektów jest konieczność umieszczania kluczy w wielu systemach, a także CRUD (tworzenie, czytanie, aktualizacja, usuwanie / wyłączanie) dla określonych użytkowników, co oznacza, że ​​trzeba być w stanie zidentyfikować, które klucze należą do których użytkowników.

ChuckCottrill
źródło
Czy mówisz o parach kluczy użytkownika lub hosta? sshfprozwiązuje problem klucza hosta, umieszczając podpisy klucza publicznego w DNS. W przypadku poświadczeń użytkownika możesz zajrzeć do certyfikatów OpenSSH lub użyć czegoś takiego jak Spacewalk lub marionetka, aby zapisać wszystkie pary kluczy w centralnej lokalizacji i wdrożyć je w razie potrzeby. Wygląda na to, że prawdopodobnie chcesz tego drugiego, ponieważ po prostu skonfigurujesz nowy serwer jako klient, a następnie wdrożysz najnowszą wersję pliku.
Bratchley,
Mam innego laptopa (fedora) na dyski sieciowe MyBook Live (z systemem Linux), dwa wbudowane komputery oczekujące na dyski twarde i planuję zbudować dwa klastry hadoop w domu (nauka). Tak, muszę zrozumieć zarządzanie kluczami.
ChuckCottrill

Odpowiedzi:

12

Zasadniczo nie powinieneś mieć więcej niż 1 klucz na maszynę klienta (nacisk na „ogólnie”). Nie jestem pewien, czy dobrze rozumiem twoje pytanie, ale jeśli mówisz, że masz oddzielny klucz dla każdego zdalnego systemu, to zdecydowanie robisz to źle.

Ssh używa kryptografii klucza publicznego. Klucz instalowany w systemie zdalnym to klucz publiczny, ponowne użycie tego klucza w innym miejscu nie jest absolutnie szkodliwe. To klucz prywatny, który musi być chroniony i pozostaje w twoim systemie osobistym.

Dobrym pomysłem jest także, aby klucz prywatny znajdował się tylko na jednym kliencie, a nie był udostępniany. Dzieje się tak, aby w przypadku naruszenia bezpieczeństwa klienta można odwołać tylko ten jeden klucz.


Teraz, jeśli pytasz, w jaki sposób możesz przekazać swój klucz publiczny do setek systemów, istnieje kilka sposobów na zrobienie tego.

Najczęstszym sposobem jest użycie wspólnych katalogów domowych. Mieć system plików NFS (lub inny sieciowy system plików) zamontowany (lub automatycznie zamontowany) we wszystkich systemach.

Innym sposobem jest skorzystanie z nowej funkcji ssh. Jest to dyrektywa konfiguracyjna o nazwie AuthorizedKeysCommand. Zasadniczo jest to polecenie, które sshd będzie uruchamiane za każdym razem, gdy będzie potrzebować wyszukać klucz publiczny. Polecenie po prostu zapisuje klucz publiczny użytkownika, do którego użytkownik jest pytany, to STDOUT. Jest to używane przede wszystkim, gdy nie masz zamontowanych katalogów domowych, ale nadal masz centralny serwer uwierzytelniający ( FreeIPA korzysta z tego).

Oczywiście możesz wykonywać inne czynności, takie jak rsync cron job /homez centralnego serwera. Ale to nie jest powszechna praktyka.

Patrick
źródło
W domu mam 8 komputerów i zmienną liczbę „serwerów” w chmurze (skalowanych w razie potrzeby). Głupio byłoby mieć 300 kluczy klienta, gdy skaluję do 300 instancji serwera. Mam więc 16 kluczy publicznych (2 użytkowników na każdego z 8 hostów). W przypadku twardych maszyn naciskam klawisze co 3 miesiące. W przypadku wystąpień chmurowych są one zintegrowane z obrazem niestandardowym.
Skaperen
2

Kiedy muszę opublikować klucz publiczny w systemie zdalnym, wszystkie strony z instrukcjami sugerują albo nadpisać (>) (niszczenie istniejących kluczy), albo dołączyć (>>) (co jest dobre, zachowuje istniejące klucze) . Myślę jednak, że osobne przechowywanie każdego klucza publicznego na maszynie docelowej byłoby lepsze. Szukam porady. A

nie widzę żadnej korzyści z przechowywania kluczy publicznych zarówno w .ssh/authorized_keysosobnym pliku, jak i w nim.

jeśli spojrzysz na rzeczywiste klucze przechowywane w pliku * uprawnione_klucze *, zobaczysz, że zawierają one czytelne dla człowieka meta-informacje o pochodzeniu klucza. np. klucz publiczny dla user@foozwykle ma wpis taki jak:

ssh-rsa AAAAB3Nza...LiPk== [email protected]

dzięki czemu bardzo łatwo jest sprawdzić / wyodrębnić / usunąć określone klucze (dołączone do niektórych użytkowników) z pliku * uprawnione_ klucze *.

identyfikator użytkownika jest tak naprawdę polem „komentarza” o dowolnej formie, więc możesz w nim umieścić dowolne informacje, które uważasz za niezbędne do zidentyfikowania danego klucza.

w każdym razie należy generować pary kluczy tylko dla „użytkowników”, którzy potrzebują dostępu do zdalnych zasobów. istnieje szansa, że ​​nie musisz się logować z każdego hosta hadoop do innego hosta hadoop. zamiast tego będziesz mieć kilka komputerów do zarządzania, które muszą mieć dostęp do wszystkich hostów hadoop. potrzebujesz tylko jednej pary kluczy na maszynę zarządzającą i zainstaluj każdy klucz publiczny na wszystkich hostach hadoop.

umläute
źródło
Każdy użytkownik wygeneruje własne klucze. Uważam, że mówisz, że każdy użytkownik powinien podać nazwę użytkownika @ nazwa hosta jako część pochodzenia klucza. Co oznacza, że ​​należy podać skrypt wymuszający nazwę użytkownika @ nazwa hosta, prawda?
ChuckCottrill
to zależy od tego, jak tworzą klucze; np. ssh-keygendoda komentarz do formularza user@host; inni generatorzy kluczy (jak ten, który jest dostarczany z kitem) mogą tego nie zrobić. ale tak, powinno być trywialne wykonanie małego skryptu, który upewnia się, że każdy klucz ma pole komentarza, które identyfikuje kombinację użytkownik / host.
umläute
0

Innym sposobem, który jest bardzo łatwy do wdrożenia i pozwala na nieco większą elastyczność w zakresie dodawania wielu użytkowników, jest użycie. https://userify.com/

Umożliwia definiowanie różnych grup serwerów i włączanie lub wyłączanie kluczy dla różnych użytkowników dla tych serwerów.

Super prosta instalacja i zarządzanie.

nelaaro
źródło