Firma Cloudflare wprowadziła narzędzie opkssh (OpenPubkey SSH), które umożliwia integrację z OpenSSH centralizowanych środków uwierzytelniania z możliwością logowania się przez dostawców OpenID Connect. Dzięki opkssh można zredukować ręczne zarządzanie i konfigurację kluczy SSH, a także zorganizować połączenie z serwerem z dowolnych hostów, bez potrzeby tworzenia kluczy prywatnych na każdym komputerze klienckim i bez ręcznego kopiowania kluczy publicznych na serwer. Aby połączyć się, wystarczy na serwerze powiązać konto z dostawcą OpenID. Kod narzędzia napisany jest w języku Go i jest rozpowszechniany na licencji Apache 2.0.
Opkssh jest zgodny z dostawcami OpenID, takimi jak Google, Microsoft/Azure i Gitlab, co pozwala na logowanie się za pomocą istniejących kont w serwisach gmail.com, microsoft.com i gitlab.com. Przy użyciu opkssh zamiast nieograniczonych czasowo kluczy SSH generowane są tymczasowe klucze, które działają przez kilka godzin i są tworzone na podstawie potwierdzenia od dostawcy OpenID. Wycieki takich kluczy po upływie ich ważności nie stanowią zagrożenia dla bezpieczeństwa. Domyślny czas ważności klucza wynosi 24 godziny, po którym konieczne jest ponowne potwierdzenie swojej tożsamości przez OpenID.
Integracja z OpenSSH opiera się na możliwości tworzenia rozszerzeń protokołu SSH, które pozwalają na dołączanie dowolnych danych do certyfikatów SSH. Po przejściu uwierzytelnienia przez OpenID klient tworzy klucz publiczny, zawierający token PK, potwierdzający przynależność klucza do zadeklarowanego użytkownika. Token jest integrowany z protokołem SSH przez pole z dodatkowymi danymi certyfikatu SSH. Tworzenie tokenów PK i ich weryfikacja po stronie serwera odbywa się z wykorzystaniem kryptograficznego protokołu OpenPubKey.
OpenPubKey umożliwia wygenerowanie klucza publicznego i powiązanie go z tokenem wydanym przez dostawcę OpenID. Poprzez podpis cyfrowy dostawca potwierdza, że ten klucz został utworzony przez zgłoszonego użytkownika. Na przykład, dostawca OpenID Google może potwierdzić, że użytkownik jest uwierzytelniony jako test@gmail.com. Po stronie serwera przeprowadzana jest weryfikacja, czy załączony token został podpisany przez dostawcę OpenID oraz czy podpis cyfrowy odpowiada zgłoszonemu kluczowi publicznemu, tzn. serwer może upewnić się, że to właśnie użytkownik test@gmail.com utworzył klucz publiczny dla podłączającego się klienta SSH.

Integracja z OpenSSH odbywa się poprzez wskazanie programu opkssh w pliku konfiguracyjnym „sshd_config” za pomocą dyrektywy „AuthorizedKeysCommand” (np. „AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t”). Ustawienia powiązania kont z OpenID są realizowane po stronie serwera SSH. Po stronie klienta SSH zmiany ustawień nie są wymagane, ale przed zalogowaniem należy uruchomić polecenie „opkssh login” i w pojawiającym się oknie przeglądarki wybrać dostawcę OpenID oraz przeprowadzić przez niego uwierzytelnienie.
Narzędzie opkssh wygeneruje klucze SSH i uzyska token PK, potwierdzający, że użytkownik przeszedł uwierzytelnienie oraz pozwalający sprawdzić, że utworzone klucze należą do zgłoszonego użytkownika. Klucz publiczny SSH, do którego za pomocą dodatkowego pola przypisany jest token PK, zostanie zapisany w pliku ~/.ssh/id_ecdsas i zacznie być przesyłany przy połączeniu z serwera narzędziem ssh.
Połączenie z serwerem odbywa się przy użyciu standardowego dla SSH schematu „ssh login@serwer”, przy czym na serwerze login musi być wcześniej zidentyfikowany z kontem w OpenID, z którego korzysta użytkownik. W ten sposób praca sprowadza się do tego, że klient SSH wysyła na serwer SSH klucz publiczny, a serwer uruchamia polecenie „opkssh verify” w celu weryfikacji klucza.
Aby powiązać konto z OpenID, administrator serwera wykonuje polecenie „opkssh add”. Na przykład, aby pozwolić na zalogowanie się na serwer jako użytkownik „root” z uwierzytelnieniem OpenID poprzez konto test@gmail.com w Gmail, należy wykonać „sudo opkssh add root test@gmail.com google”, po czym klient będzie mógł łączyć się pod parametrami tego konta poleceniem „ssh root@host_serwera”.
Ręczne przypisanie konta można również wykonać poprzez plik konfiguracyjny /etc/opk/auth_id (lub ~/.opk/auth_id), w którym dla podanego przykładu zostanie zapisana linia „root test@gmail.com https://accounts.google.com”. Dodatkowo w pliku /etc/opk/providers można określić listę dozwolonych dostawców OpenID, ich parametry oraz listę dozwolonych identyfikatorów klientów.

Źródło: opennet.ru
