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_keysCole 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@laptopUma chave que existe para executar um trabalho deve ser permitida a executar um trabalho:
restrict,command="/usr/local/bin/backup-receive" ssh-ed25519 AAAAC3Nza... backupTeste antes de bloquear
Deixe a primeira sessão conectada. De um segundo terminal:
ssh -o PreferredAuthentications=publickey deploy@<ipv4> idSe 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 sshAuthenticationMethods 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.