A forma habitual de entrar numa máquina Linux na nuvem é uma chave SSH: um ficheiro no seu computador e o seu par público copiado para a máquina. Funciona, mas repare no que implica quando há mais do que uma pessoa e mais do que uma máquina: cada chave há que copiá-la para cada máquina, cada pessoa que sai deixa a sua chave em todas elas até que alguém se lembre de a apagar, e uma chave perdida vale para sempre. Sabe hoje, com certeza, quantas chaves podem entrar no seu servidor de produção e de quem são?
Os certificados SSH resolvem exatamente isso. É a mesma tecnologia que o Simplio usa para a sua chave suplente e a mesma que o Lightsail usa para a sua consola web, e não é preciso ser perito para a entender.
Antes de começar: o que significa cada coisa
- Chave SSH
- Um par de ficheiros: a privada (fica no seu computador, nunca se partilha) e a pública (copia-se para a máquina, no ficheiro authorized_keys do utilizador). A máquina deixa entrar quem demonstrar ter a privada.
- Certificado SSH
- A sua chave pública, assinada por uma autoridade, com um nome, uma data de caducidade e uma lista de utilizadores para os quais vale. A máquina não precisa de conhecer a sua chave: basta-lhe confiar em quem a assinou.
- Autoridade de certificados (CA)
- Outra chave SSH, mas que só serve para assinar. A sua pública copia-se para as máquinas uma vez; a sua privada guarda-se muito bem, porque quem a tiver pode assinar certificados.
- Principal
- O nome de utilizador para o qual o certificado vale. Um certificado para "ubuntu" não serve para entrar como "root".
- Validade
- Desde quando e até quando o certificado vale. Pode ser um ano ou cinco minutos.
- authorized_keys
- O ficheiro, dentro da pasta .ssh de cada utilizador da máquina, com as chaves públicas que podem entrar como ele. Admite também uma linha especial que diz "aceita certificados assinados por esta autoridade".
Passo a passo
Entenda a diferença com um exemplo
Com chaves: para que a Ana entre em dez máquinas, a sua chave pública copia-se para dez ficheiros. Quando a Ana sai, há que apagá-la de dez sítios, e se um se esquece, a Ana (ou quem tiver o portátil dela) continua a entrar. Com certificados: as dez máquinas confiam numa única autoridade. À Ana assina-se um certificado que vale até sexta-feira. No sábado, a Ana não entra em nenhuma, sem tocar numa única máquina. E se se lhe assina um novo todas as manhãs, nunca há nada para revogar.
Crie uma autoridade (uma vez, no seu computador)
ssh-keygen -t ed25519 -f mi_ca -C "CA de mi empresa"Saem dois ficheiros.
mi_caé a privada: guarde-a num gestor de palavras-passe ou num disco cifrado, e nunca a copie para nenhuma máquina.mi_ca.pubé a que irá para as máquinas.Diga à máquina que confie na sua autoridade
Há duas formas. A global, em
/etc/ssh/sshd_config, vale para todos os utilizadores:TrustedUserCAKeys /etc/ssh/mi_ca.pubE a local, sem tocar na configuração do SSH: uma linha no
authorized_keysdo utilizador, que só vale para ele:cert-authority,principals="ubuntu" ssh-ed25519 AAAA... CA de mi empresaA segunda é a que convém no Lightsail, porque o Lightsail já usa
TrustedUserCAKeyspara a sua própria consola web e só pode haver uma. Recarregue o SSH (sudo systemctl reload ssh) e a máquina já aceita certificados seus.Assine um certificado para uma pessoa
A pessoa envia-lhe a sua chave pública (
id_ed25519.pub). Você assina-a, dizendo para que utilizador vale e quanto dura:ssh-keygen -s mi_ca -I "ana-portatil" -n ubuntu -V +1w id_ed25519.pubSai
id_ed25519-cert.pub: devolve-lho e ela põe-no junto da sua chave.-Ié um nome para o registo da máquina (assim sabe quem entrou),-no utilizador permitido e-V +1wuma semana de validade. Pode pôr+5me terá um certificado de cinco minutos.Entre e verifique
ssh -i id_ed25519 ubuntu@IP.DE.LA.MAQUINAO SSH usa o certificado sozinho. Na máquina,
sudo journalctl -u ssh | grep ana-portatilmostra-lhe a entrada com o nome que pôs ao assinar. Passada a validade, o mesmo comando responde "Permission denied" sem que ninguém tenha tocado em nada.Adicione condições: só a partir de um IP
Ao assinar pode adicionar restrições. A mais útil: que o certificado só valha a partir de um endereço concreto.
ssh-keygen -s mi_ca -I "copias-nocturnas" -n backup -V +1d -O source-address=203.0.113.10 id_backup.pubSe esse certificado se perder, a partir de qualquer outro IP não serve. É o que faz a chave suplente do Simplio: certificados de cinco minutos, para um único utilizador, válidos só a partir do IP do servidor do Simplio.
O que pode correr mal
"Permission denied" apesar de o certificado estar correto
O mais comum: o principal não coincide (assinou para "ubuntu" e entra como "admin"), a validade já passou, ou a hora da máquina está errada (os certificados dependem do relógio; verifique com date e ative a sincronização de hora).
A máquina já tinha TrustedUserCAKeys
É o caso do Lightsail e de algumas imagens. Não o mude: perderia a consola web. Use a linha cert-authority no authorized_keys do utilizador, que convive sem problema.
Perdi a privada da CA
Não pode assinar mais certificados, mas os já assinados continuam a valer até à sua caducidade. Crie uma CA nova e substitua a pública nas máquinas enquanto os certificados velhos ainda entram. Por isso as validades curtas são uma vantagem: a mudança completa-se sozinha.
Roubaram-me a privada da CA
Quem a tiver pode assinar certificados para todas as suas máquinas. Substitua a pública em todas elas quanto antes; se usou source-address, o ladrão precisa além disso de estar nesse IP. É a razão para a guardar fora das máquinas e fora do e-mail.
No Simplio
O Simplio usa certificados SSH por baixo para que você não tenha de o fazer. O terminal no navegador entra com a chave temporária que a AWS entrega para cada sessão, sem que ninguém receba um ficheiro. E a chave suplente é exatamente o que este guia explica, levado ao limite: um utilizador sem palavra-passe na máquina, que só aceita certificados assinados pelo Simplio, de cinco minutos, para esse utilizador e só a partir do IP do Simplio, com o seu código do duplo fator em cada utilização. Deixa a chave com um botão e o Simplio verifica todos os dias que continua a abrir. Como funciona a chave suplente.
O mesmo, na AWS e no Simplio
| Na consola da AWS | No Simplio | |
|---|---|---|
| Dar acesso a uma pessoa | Copiar a chave dela para cada máquina | Conceder-lhe a máquina no Simplio: o terminal do navegador usa a chave temporária que a AWS dá |
| Retirar-lho | Apagar a chave dela de cada máquina, sem esquecer nenhuma | Retirar-lhe a máquina no Simplio |
| Acesso de emergência | Criar a sua CA, distribuir a pública, assinar à mão um certificado quando for preciso | Chave suplente: certificado de cinco minutos, assinado pelo Simplio, só a partir do IP dele, com duplo fator |
| Saber quem entrou | Ler o registo de SSH de cada máquina | Registo de atividade do Simplio: quem, que máquina, quando, de que IP |