A empresa Cloudflare lançou a ferramenta opkssh (OpenPubkey SSH), permitindo a integração de métodos de autenticação centralizada no OpenSSH com acesso através de provedores de OpenID Connect. Com o opkssh, é possível eliminar o trabalho manual na gestão e configuração de chaves SSH, além de permitir a conexão ao servidor a partir de qualquer host, sem a necessidade de criar chaves privadas em cada computador cliente e sem a cópia manual de chaves públicas para o servidor. Para se conectar, basta realizar a vinculação da conta ao provedor de OpenID no servidor. O código da ferramenta é escrito em Go e é distribuído sob a licença Apache 2.0.
O opkssh é compatível com provedores OpenID como Google, Microsoft/Azure e Gitlab, permitindo que o acesso seja configurado através de contas existentes em serviços como gmail.com, microsoft.com e gitlab.com. Ao usar o opkssh, em vez de chaves SSH sem expiração, são geradas chaves temporárias, válidas por algumas horas e formadas com base na confirmação do provedor OpenID. A vazamento dessas chaves após o prazo de validade não representa uma ameaça à segurança. Por padrão, a validade da chave é de 24 horas, após o qual a reidentificação via OpenID é necessária.
A integração com OpenSSH é baseada na capacidade de criar extensões do protocolo SSH, permitindo anexar dados arbitrários aos certificados SSH. Após a autenticação através do OpenID, o cliente gera uma chave pública que contém um token PK, confirmando a propriedade da chave pelo usuário declarado. O token é integrado ao protocolo SSH através do campo de dados adicionais do certificado SSH. A criação e verificação de tokens PK no lado do servidor é realizada utilizando o protocolo criptográfico OpenPubKey.
OpenPubKey permite gerar uma chave pública e vinculá-la a um token emitido pelo provedor OpenID. Por meio da assinatura digital, o provedor confirma que essa chave foi criada pelo usuário autenticado declarado. Por exemplo, o provedor OpenID Google pode confirmar que o usuário está autenticado como test@gmail.com. No lado do servidor, verifica-se se o token anexado foi assinado pelo provedor OpenID e se a assinatura digital corresponde à chave pública declarada, ou seja, o servidor pode assegurar que o usuário test@gmail.com realmente criou a chave pública para o cliente SSH conectado.

A integração com o OpenSSH é organizada através da indicação do programa opkssh no arquivo de configuração «sshd_config» pela diretiva «AuthorizedKeysCommand» (por exemplo: «AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t»). A configuração do vínculo entre contas e OpenID é realizada no lado do servidor SSH. No lado do cliente SSH, não são necessárias alterações nas configurações, mas antes do login, deve-se executar o comando «opkssh login» e na janela do navegador que se abre, selecionar o provedor OpenID e seguir com a autenticação através dele.
A utilidade opkssh gerará chaves SSH e obterá um token PK que confirma que o usuário foi autenticado e permite verificar se as chaves criadas pertencem ao usuário declarado. A chave pública SSH, à qual um token PK foi anexado através de um campo de dados adicionais, será gravada no arquivo ~/ .ssh/id_ecdsas e começará a ser transmitida ao se conectar à servidor utilidade ssh.
A conexão com o servidor é feita utilizando o esquema padrão do SSH «ssh login@servidor», onde o servidor login deve ser previamente identificado com uma conta no OpenID utilizada pelo usuário. Assim, a operação se resume ao fato de que o cliente ssh envia a chave pública para o servidor ssh, que executa o comando «opkssh verify» para verificar a chave.
Para vincular a conta ao OpenID, o administrador do servidor executa o comando «opkssh add». Por exemplo, para permitir o acesso ao servidor sob o usuário «root» com autenticação OpenID através da conta test@gmail.com no Gmail, deve-se executar «sudo opkssh add root test@gmail.com google», após o que o cliente poderá se conectar com os parâmetros dessa conta usando o comando «ssh root@host_servidor».
A vinculação da conta também pode ser feita manualmente através do arquivo de configuração /etc/opk/auth_id (ou ~/.opk/auth_id), no qual, para o exemplo acima, será gravada a linha "root test@gmail.com https://accounts.google.com". Além disso, através do arquivo /etc/opk/providers, pode-se definir a lista de provedores OpenID permitidos, seus parâmetros e a lista de identificadores de clientes autorizados.

Fonte: opennet.ru
