Configuracao de Autenticacao por Chave SSH - Login Seguro sem Senha

Configuracao de Autenticacao por Chave SSH - Login Seguro sem Senha

O Que Este Artigo Aborda

  • Como gerar um par de chaves SSH e conectar-se a um servidor
  • Como implantar sua chave publica corretamente com ssh-copy-id
  • Como gerenciar multiplos servidores com ~/.ssh/config

Resumo Rapido (3 Passos)

  1. Execute ssh-keygen -t ed25519 para gerar um par de chaves
  2. Execute ssh-copy-id user@server para implantar a chave publica
  3. Execute ssh user@server — sem necessidade de senha

Pre-requisitos

  • Ubuntu / Debian / Linux baseado em RHEL no cliente e no servidor
  • OpenSSH instalado em ambas as maquinas
  • Acesso inicial ao servidor via autenticacao por senha

Por Que Usar Autenticacao por Chave?

A autenticacao por chave e mais segura que senhas e elimina a entrada manual para automacao. Os tres principais motivos para migrar:

  • Seguranca: Sua chave privada nunca sai da sua maquina local. Nenhuma senha e enviada pela rede.
  • Resistencia a forca bruta: Um comprimento de chave matematicamente robusto torna ataques de dicionario inviaveis.
  • Automacao: rsync, Ansible e pipelines CI/CD podem conectar-se de forma nao interativa.

1. Gerar um Par de Chaves

Qual algoritmo usar?

ED25519 e a recomendacao atual. E mais curto, mais seguro e mais rapido que RSA-4096.

ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub

A flag -C adiciona um comentario (util para identificacao). E opcional.

Por que definir uma passphrase?

Uma passphrase criptografa o proprio arquivo da chave privada. Mesmo que sua maquina seja roubada, a chave nao pode ser usada imediatamente. Use ssh-agent para evitar redigitar a passphrase a cada conexao (veja abaixo).

Verifique os arquivos gerados:

ls -la ~/.ssh/
total 16
drwx------ 2 user user 4096 May 31 10:00 .
drwxr-xr-x 8 user user 4096 May 31 10:00 ..
-rw------- 1 user user  419 May 31 10:00 id_ed25519
-rw-r--r-- 1 user user  107 May 31 10:00 id_ed25519.pub
  • id_ed25519 (chave privada): permissoes 600. Nunca compartilhe este arquivo.
  • id_ed25519.pub (chave publica): adicionada ao ~/.ssh/authorized_keys no servidor.

2. Implantar a Chave Publica no Servidor

Usando ssh-copy-id (recomendado)

Execute uma vez enquanto a autenticacao por senha ainda estiver ativa no servidor.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s)
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
user@server's password:
Number of key(s) added: 1

ssh-copy-id adiciona a chave publica ao ~/.ssh/authorized_keys no servidor e define as permissoes corretas automaticamente.

Implantacao manual quando ssh-copy-id nao esta disponivel

cat ~/.ssh/id_ed25519.pub | ssh user@server \
  "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. Definir Permissoes Corretas

O SSH rejeita a autenticacao por chave quando as permissoes do diretorio ou arquivo sao muito permissivas. Esse e um comportamento intencional de seguranca.

Caminho Permissao Necessaria Motivo
~/.ssh/ 700 Somente leitura/escrita/execucao do dono
~/.ssh/authorized_keys 600 Somente leitura/escrita do dono
~/.ssh/id_ed25519 600 Chave privada deve ser estritamente protegida
~/.ssh/id_ed25519.pub 644 Chave publica e segura para outros lerem

Comandos de correcao:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519

4. Testar a Conexao

ssh -v user@server

A flag -v (verbose) imprime o processo de autenticacao em detalhes.

...
debug1: Offering public key: /home/user/.ssh/id_ed25519 ED25519 SHA256:xxxxx
debug1: Server accepts key: /home/user/.ssh/id_ed25519 ED25519 SHA256:xxxxx
Authenticated to server ([x.x.x.x]:22) using "publickey".

Authenticated to server ... using "publickey" confirma que a autenticacao por chave esta funcionando.

5. Gerenciar Conexoes com ~/.ssh/config

O arquivo ~/.ssh/config permite salvar configuracoes de conexao sob um alias curto.

vim ~/.ssh/config

Exemplo de configuracao:

Host myserver
    HostName 192.168.1.100
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Host staging
    HostName staging.example.com
    User deploy
    IdentityFile ~/.ssh/id_ed25519

Apos salvar, conecte-se apenas com ssh myserver.

chmod 600 ~/.ssh/config

Se as permissoes de ~/.ssh/config forem mais permissivas que 644, o SSH pode ignorar o arquivo completamente. Mantenha em 600.

6. Gerenciar Passphrases com ssh-agent

ssh-agent mantem sua chave descriptografada na memoria para que voce digite a passphrase apenas uma vez por sessao.

# Iniciar o agente
eval "$(ssh-agent -s)"

# Adicionar sua chave (digite a passphrase uma vez)
ssh-add ~/.ssh/id_ed25519
Identity added: /home/user/.ssh/id_ed25519 (your_email@example.com)

Listar chaves registradas:

ssh-add -l

No macOS, o Keychain do sistema integra-se com o ssh-agent. Adicione UseKeychain yes e AddKeysToAgent yes ao ~/.ssh/config para persistir as chaves entre reinicializacoes.

Resumo

Comando Finalidade
ssh-keygen -t ed25519 Gerar par de chaves (ED25519)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server Implantar chave publica no servidor
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys Corrigir permissoes de diretorio e arquivo
ssh -v user@server Testar conexao com saida detalhada
eval "$(ssh-agent -s)" && ssh-add Cachear passphrase para a sessao

Proximas Leituras