Cloudflare har præsenteret værktøjet opkssh (OpenPubkey SSH), som muliggør integration af centraliseret autentifikation i OpenSSH med mulighed for login via OpenID Connect-udbydere. Med opkssh kan man undgå manuel administration og opsætning af SSH-nøgler og organisere forbindelse til serveren fra enhver vært uden behov for at oprette private nøgler på hver klientcomputer og uden manuel kopiering af offentlige nøgler til serveren. For at tilslutte sig er det tilstrækkeligt at udføre en binding til en konto hos OpenID-udbyderen på serveren. Koden til værktøjet er skrevet i Go og distribueres under Apache 2.0 licensen.
Opkssh er kompatibel med OpenID-udbydere som Google, Microsoft/Azure og Gitlab, hvilket gør det muligt at konfigurere login via eksisterende konti i tjenesterne gmail.com, microsoft.com og gitlab.com. Ved brug af opkssh genereres der midlertidige nøgler i stedet for nøgler uden tidsbegrænsning, som er gyldige i et par timer og skabes baseret på bekræftelse fra OpenID-udbyderen. Lækage af sådanne nøgler efter udløb udgør ikke en sikkerhedstrussel. Som standard er nøglernes gyldighedsperiode 24 timer, hvorefter det er nødvendigt at identificere sig igen via OpenID.
Integrationen med OpenSSH er baseret på muligheden for at oprette SSH-protokoludvidelser, der tillader vedhæftning af vilkårlige data til SSH-certifikater. Efter autentifikation via OpenID genererer klienten en offentlig nøgle, der indeholder en PK-token, som bekræfter, at nøglen tilhører den angivne bruger. Tokenet integreres i SSH-protokollen gennem feltet for yderligere data i SSH-certifikatet. Oprettelse af PK-tokens og deres verificering på serversiden udføres ved hjælp af det kryptografiske protokol OpenPubKey.
OpenPubKey gør det muligt at generere en offentlig nøgle og knytte den til en token, der er udstedt af OpenID-udbyderen. Gennem den digitale underskrift bekræfter udbyderen, at denne nøgle er oprettet af den angivne autentificerede bruger. For eksempel kan OpenID-udbyderen Google bekræfte, at brugeren er autentificeret som test@gmail.com. På serversiden kontrolleres det, om den vedhæftede token er underskrevet af OpenID-udbyderen, og om den digitale underskrift svarer til den angivne offentlige nøgle, dvs. serveren kan bekræfte, at det netop er brugeren test@gmail.com, der har oprettet den offentlige nøgle til den tilkoblede SSH-klient.

Integration med OpenSSH er organiseret ved at angive programmet opkssh i konfigurationsfilen «sshd_config» gennem direktivet «AuthorizedKeysCommand» (for eksempel: «AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t»). Indstillingen af binding af konti med OpenID sker på SSH-serverens side. På SSH-klientens side kræves der ingen ændringer, men før login skal kommandoen «opkssh login» køres, og i det fremkomne browservindue skal OpenID-udbyderen vælges og autentificeringen udføres gennem den.
Værktøjet opkssh genererer SSH-nøgler og modtager en PK-token, der bekræfter, at brugeren er blevet autentificeret og gør det muligt at bekræfte, at de oprettede nøgler tilhører den angivne bruger. Den offentlige SSH-nøgle, som har en PK-token knyttet til sig via et felt med ekstra data, vil blive skrevet til filen ~/ .ssh/id_ecdsas og begynder at blive sendt ved tilslutning til server værktøjet ssh.
Forbindelse til serveren sker ved hjælp af den sædvanlige SSH-procedure «ssh login@server», hvor serveren login på forhånd skal være identificeret med en konto i OpenID, som brugeren benytter. På denne måde sendes den offentlige nøgle fra ssh-klienten til ssh-serveren, og serveren udfører kommandoen «opkssh verify» for at kontrollere nøglen.
For at knytte en konto til OpenID udfører serveradministratoren kommandoen «opkssh add». For eksempel, for at tillade login på serveren som bruger «root» med OpenID-autentificering gennem kontoen test@gmail.com i Gmail, skal der udføres «sudo opkssh add root test@gmail.com google», hvorefter klienten kan tilslutte under de angivne kontooplysninger med kommandoen «ssh root@server_host».
Du kan også manuelt knytte din konto via konfigurationsfilen /etc/opk/auth_id (eller ~/ .opk/auth_id), hvor den for ovenstående eksempel vil indeholde linjen «root test@gmail.com https://accounts.google.com». Yderligere kan du i filen /etc/opk/providers definere en liste over tilladte OpenID-udbydere, deres indstillinger og en liste over godkendte klientidentifikatorer.

Kilde: opennet.ru
