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.
sshfp
rozwią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.Odpowiedzi:
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
/home
z centralnego serwera. Ale to nie jest powszechna praktyka.źródło
nie widzę żadnej korzyści z przechowywania kluczy publicznych zarówno w
.ssh/authorized_keys
osobnym 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@foo
zwykle ma wpis taki jak: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.
źródło
ssh-keygen
doda komentarz do formularzauser@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.Najnowsze OpenSSH pozwalają uzyskać klucze ssh z LDAP, patrz „AuthorizedKeysCommand” na stronie podręcznika sshd_config . Osobiście wolałbym certyfikaty OpenSSH, a nie klucze, patrz http://blog.habets.pp.se/2011/07/OpenSSH-certificates . Możesz zarządzać kluczami za pomocą dowolnego menedżera konfiguracji, takiego jak cfengine, marionetka, szef kuchni, sól ...
źródło
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.
źródło