Compania Cloudflare a lansat instrumentul opkssh (OpenPubkey SSH), care permite integrarea unui sistem de autentificare centralizată în OpenSSH, cu posibilitatea de conectare prin intermediul furnizorilor OpenID Connect. Cu ajutorul opkssh, se poate elimina munca manuală de gestionare și configurare a cheilor SSH, precum și organizarea conectării la server de pe orice gazdă, fără a fi necesară crearea de chei private pe fiecare computer client și fără a copia manual cheile publice pe server. Pentru conectare, este suficient să se efectueze pe server legarea la contul de la furnizorul OpenID. Codul instrumentului este scris în limbajul Go și este distribuit sub licența Apache 2.0.
Opkssh este compatibil cu furnizorii OpenID Google, Microsoft/Azure și Gitlab, ceea ce permite configurarea autentificării prin intermediul conturilor existente în serviciile gmail.com, microsoft.com și gitlab.com. Atunci când se folosește opkssh în locul cheilor SSH fără limită de timp, sunt generate chei temporare, valabile câteva ore și formate pe baza confirmării de la furnizorul OpenID. Scurgerea acestor chei după expirarea termenului de valabilitate nu reprezintă o amenințare la adresa securității. În mod implicit, perioada de valabilitate a cheii este de 24 de ore, după care trebuie să te reidentifici prin intermediul OpenID.
Integrarea cu OpenSSH se bazează pe posibilitatea de a crea extensii ale protocolului SSH, care permit atașarea de date arbitrare la certificatele SSH. După ce a trecut de autentificarea prin OpenID, clientul formează o cheie publică care conține un token PK, confirmând apartenența cheii utilizatorului declarat. Tokenul este integrat în protocolul SSH printr-un câmp cu date suplimentare al certificatului SSH. Crearea tokenurilor PK și verificarea acestora pe server se face folosind protocolul criptografic OpenPubKey.
OpenPubKey permite generarea unei chei publice și atașarea acesteia la un token eliberat de un furnizor OpenID. Prin semnătura digitală, furnizorul confirmă că această cheie a fost creată de utilizatorul autentificat declarat. De exemplu, furnizorul OpenID Google poate confirma că utilizatorul este autentificat ca test@gmail.com. Pe partea serverului, se verifică dacă tokenul atașat este semnat de furnizorul OpenID și dacă semnătura digitală corespunde cheii publice declarate, adică serverul poate verifica că anume utilizatorul test@gmail.com a creat cheia publică pentru clientul SSH conectat.

Integrarea cu OpenSSH este realizată prin specificarea programului opkssh în fișierul de configurare „sshd_config” prin directive precum „AuthorizedKeysCommand” (de exemplu: „AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t”). Configurarea legăturii conturilor cu OpenID se face pe partea serverului SSH. Pe partea clientului SSH, modificările de configurare nu sunt necesare, dar înainte de conectare trebuie să se execute comanda „opkssh login” și, în fereastra browserului care apare, să se aleagă furnizorul OpenID și să se efectueze autentificarea prin acesta.
Utilitarul opkssh va genera chei SSH și va obține un token PK care confirmă că utilizatorul a trecut autentificarea și permite verificarea că cheile create aparțin utilizatorului declarat. Cheia publică SSH, la care este atașat tokenul PK prin câmpul de date suplimentare, va fi salvată în fișierul ~/ .ssh/id_ecdsas și va începe să fie transmisă la conectarea la server utilitarul ssh.
Conectarea la server se realizează folosind schema standard pentru SSH „ssh login@server”, unde server login-ul trebuie să fie mai întâi identificat cu contul din OpenID pe care îl folosește utilizatorul. Astfel, funcționarea se rezumă la faptul că clientul SSH trimite la serverul SSH cheia publică, iar serverul execută comanda „opkssh verify” pentru a verifica cheia.
Pentru a lega contul de OpenID, administratorul serverului execută comanda „opkssh add”. De exemplu, pentru a permite autentificarea pe server sub utilizatorul „root” cu autentificarea OpenID prin contul test@gmail.com în Gmail, ar trebui să se execute „sudo opkssh add root test@gmail.com google”, după care clientul va putea să se conecteze folosind parametrii acestui cont cu comanda „ssh root@host_server”.
Legătura contului poate fi realizată și manual prin intermediul fișierului de configurare /etc/opk/auth_id (sau ~/ .opk/auth_id), în care pentru exemplul menționat anterior va fi înregistrat textul „root test@gmail.com https://accounts.google.com”. În plus, prin fișierul /etc/opk/providers se poate defini lista providerilor OpenID acceptați, parametrii acestora și lista identificatorilor clienților permisi.

Sursa: opennet.ro
