Base de conhecimento

Adicione uma chave SSH e desligue as senhas

Gere uma chave ed25519, instale-a corretamente, teste-a antes de quebrar qualquer coisa e desative a autenticação por senha de vez.

Gere a chave na máquina em que você está sentado

Não no servidor. A metade privada nunca deve existir em um host ao qual você possa perder o acesso, e copiá-la por aí anula o propósito de tê-la.

ssh-keygen -t ed25519 -a 100 -C "laptop-2026"

-a 100 define o número de rodadas de KDF que protegem a frase secreta, que é a única coisa entre um laptop roubado e sua frota. Use uma frase secreta. Se você tiver um token de hardware, use-o em vez disso:

ssh-keygen -t ed25519-sk -O resident -C "token-1"

Instale a metade pública

ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@<ipv4>

Manualmente, a partir de uma sessão root, se a conta ainda não tiver senha:

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /dev/null /home/deploy/.ssh/authorized_keys
cat >> /home/deploy/.ssh/authorized_keys

Cole a linha única e pressione Ctrl-D. As permissões importam mais do que as pessoas esperam: o sshd recusa um diretório home gravável por grupo ou um diretório .ssh e se explica apenas no log do daemon, nunca para o cliente.

Restrinja a chave enquanto estiver por lá

As opções em authorized_keys se aplicam por chave. restrict desliga tudo, e então você adiciona de volta o que a chave realmente precisa:

restrict,pty ssh-ed25519 AAAAC3Nza... deploy@laptop

Uma chave que existe para executar um trabalho deve ser permitida a executar um trabalho:

restrict,command="/usr/local/bin/backup-receive" ssh-ed25519 AAAAC3Nza... backup

Teste antes de bloquear

Deixe a primeira sessão conectada. De um segundo terminal:

ssh -o PreferredAuthentications=publickey deploy@<ipv4> id

Se isso imprimir seu uid, o caminho da chave funciona. Se não imprimir, ssh -vvv no cliente e journalctl -u ssh -n 50 no servidor dirão, entre os dois, qual lado está com problema. São permissões em cerca de metade das vezes e o nome de usuário errado na maioria do restante.

Desligue as senhas

cat > /etc/ssh/sshd_config.d/20-keys-only.conf <<EOF
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey
EOF
sshd -t && systemctl reload ssh

AuthenticationMethods publickey é o cinto sob as suspensórias. Mesmo que um arquivo drop-in posterior reative silenciosamente as senhas, o daemon ainda recusa qualquer coisa que não seja uma chave.

Confirme do cliente que a porta está fechada:

ssh -o PreferredAuthentications=password deploy@<ipv4>

O resultado esperado é Permission denied (publickey).

Chaves no momento da implantação

O painel mantém uma lista de chaves por conta. Marque as que deseja e o cloud-init as escreve durante o primeiro boot, o que significa que uma instância pode existir pela primeira vez com a autenticação por senha já desligada. Anexar a chave ao pedido transforma os dez minutos acima em um.

Quando você perder a chave

Não há recuperação baseada em identidade aqui, porque não temos identidade. O console fora de banda é o caminho de volta: ele alcança a instância por um caminho que nunca toca o sshd, e a partir de um shell de recuperação você pode anexar uma nova chave e seguir em frente.

Mantenha uma segunda chave em uma segunda máquina e você nunca precisará ler este artigo.

Pronto quando você estiver

Escolha uma cidade. Escolha um tamanho. Pague em cripto.

Sem formulários sobre quem você é, sem esperar aprovação de um humano, sem ligação para verificar nada. O pagamento é confirmado e as credenciais chegam na sua caixa de entrada.