Tenho visto muitos tutoriais sobre como você pode ser sua própria Autoridade Certificadora (CA). Os tutoriais que vi são sobre como gerar chaves SSL e não chaves ssh, então fiquei me perguntando como faço para gerar chaves ssh como essa no Ubuntu Server 14.04 LTS? A razão pela qual quero fazer isso dessa maneira é para poder gerenciar melhor as chaves ssh e para permitir que eu as revogue caso eles saiam da empresa, para que não possam mais acessar aquele servidor.
Responder1
Você não pode. O SSH não analisa uma CRL ou algo semelhante para verificar se uma chave ainda é válida. Se você deseja remover facilmente o acesso aos servidores das pessoas que saem da sua loja, posso pensar em duas opções:
- Não gerencie as chaves diretamente, mas gerencie-as por meio de algo como fantoche (isso tem suporte direto para adicionar e remover chaves individuais de/para um
authorized_keys
arquivo). Dessa forma, você tem apenas um lugar onde precisa adicionar ou remover chaves ssh, e o puppet garante que as alterações sejam ativadas em todos os seus hosts - Desative
PubKeyAuthentication
totalmente, mude para outra coisa para autenticação que tenha um sistema de autenticação central (por exemplo, Kerberos permite autenticação sem senha e possui um banco de dados de autenticação central, mas é um tanto complicado de configurar para os não iniciados).
Responder2
Desde a versão 5.4, o OpenSSH tem seus próprios certificados reais. Eles são mais simples na estrutura do que os certificados X509, mas têm funcionalidades muito semelhantes.
Você cria um par de chaves ssh regular e usa como CA. De preferência, uma CA de host e uma CA de usuário. Então você pode assinar chaves públicas com esta CA usando ssh-keygen. Por exemplo
ssh-keygen -s /path/to/ca_key -I key_id -z serial \
-n principal1,principal2 -V +53w /path/to/user_key.pub
Este comando criará um arquivo chamado user_key-cert.pub que agora é seu certificado. O certificado é válido por 53 semanas e pode ser usado para efetuar login como principal1 e principal2 em qualquer host que confie na CA que assinou a chave.
Para dizer ao sshd para confiar nesta CA, basta consultar ca_key.pub em sshd_config assim
TrustedUserCAKeys /etc/ssh/ca_key.pub
Existem também várias maneiras de revogar certificados ssh (sua pergunta real) e estas são mencionadas nos manuais do openssh. Mas a opção básica em sshd_config é RevokedKeys. Você pode usar arquivos de texto ou KRLs binários para isso.
Para obter mais informações, escrevi alguns guias sobre CAs SSH https://framkant.org/2016/10/setting-up-a-ssh-certificate-authority-ca/
Para um controle de acesso mais refinado e escalonável, dê uma olhada em: https://framkant.org/2017/07/scalable-access-control-using-openssh-certificates/