por Tiago Silva

Ao acessar um servidor via SSH, é comum configurar a autenticação por chave para que cada computador autorizado possua sua própria credencial de acesso.

É necessário gerar um par de chaves, autorizar a chave pública no servidor e configurar o cliente SSH para utilizar a chave privada correspondente.

Além da autenticação, o cliente SSH permite registrar os parâmetros da conexão no arquivo ~/.ssh/config. Com isso, endereço, usuário, porta e chave podem ser associados a um nome curto, como alias_servidor. Esse alias passa a representar toda a configuração da conexão e pode ser utilizado tanto diretamente no terminal quanto em scripts de deploy e tarefas de administração.

Este guia registra esse processo completo para a configuração de um novo computador cliente. Os exemplos utilizam PowerShell no Windows, mas a estrutura do arquivo config e os conceitos apresentados também se aplicam ao Linux e ao macOS.

Nivelamento Conceitual

SSH

SSH (Secure Shell) é um protocolo de rede baseado no modelo cliente-servidor para comunicação entre dispositivos. Permite, entre outras funcionalidades, execução remota de comandos, transferência de arquivos e tunelamento de conexões por meio de um canal criptografado, além de fornecer mecanismos para autenticação das partes envolvidas.

Diferentes Implementações

Existem diferentes implementações e suítes de software que permitem utilizar o protocolo SSH. Alguns exemplos são:

  • OpenSSH — provavelmente a implementação mais popular. Não possui interface gráfica própria e suas ferramentas são utilizadas principalmente por linha de comando. É amplamente utilizado em Windows, Linux e macOS;
  • PuTTY — conjunto de ferramentas bastante utilizado no Windows, incluindo cliente com interface gráfica;
  • Dropbear — implementação compacta, comum em sistemas embarcados;
  • Tectia SSH — implementação comercial.

Neste artigo será utilizado o OpenSSH.

O OpenSSH é uma suíte que inclui diferentes programas, entre eles:

  • ssh — cliente SSH;
  • sshd — servidor SSH;
  • ssh-keygen — criação e gerenciamento de pares de chaves;
  • ssh-agent — mantém chaves privadas disponíveis para autenticação;
  • ssh-add — adiciona chaves ao ssh-agent.

Autenticação por Chaves

O SSH pode utilizar autenticação por chave pública, baseada em criptografia assimétrica. Nesse modelo são utilizadas duas chaves matematicamente relacionadas:

  • chave privada — permanece no computador cliente;
  • chave pública — é cadastrada no servidor.

Durante a autenticação, o cliente demonstra possuir a chave privada correspondente à chave pública autorizada pelo servidor, sem transmitir a chave privada.

Algoritmos Criptográficos das Chaves

Existem diferentes algoritmos que podem ser utilizados para as chaves de autenticação SSH, entre eles:

Algoritmo Características
Ed25519 Moderno, eficiente, utiliza chaves pequenas e é uma boa opção padrão
RSA Muito difundido e útil quando é necessária compatibilidade com sistemas mais antigos
ECDSA Baseado em curvas elípticas e suportado por diversas implementações SSH
DSA Algoritmo legado, atualmente não recomendado

Nota: neste artigo será utilizado Ed25519. As chaves Ed25519 são utilizadas no processo de autenticação e não para criptografar todo o tráfego da sessão SSH. Após o estabelecimento da conexão, o SSH utiliza algoritmos de criptografia simétrica para proteger o tráfego da sessão.

1. Configurações

Uma conexão SSH com autenticação por chave pode ser entendida em dois macroblocos.

Cliente

Trata-se do dispositivo que inicia a conexão, onde ficam dois elementos principais:

  • o alias da conexão, definido em ~/.ssh/config, que informa ao SSH qual servidor acessar, qual usuário utilizar e qual chave privada deve ser usada. O alias pode ser qualquer nome fácil de lembrar por quem inicia a comunicação;
  • a chave privada, armazenada somente no computador cliente.

O alias reúne os parâmetros necessários para a conexão e aponta para a chave privada correspondente.

Servidor

Representa o dispositivo que recebe a solicitação de conexão.

A chave pública é gerada junto com a chave privada no computador cliente, mas deve ser copiada para o servidor remoto e adicionada ao arquivo:

~/.ssh/authorized_keys

Esse arquivo determina quais chaves públicas estão autorizadas a autenticar como aquele usuário. Por exemplo, uma chave adicionada em /root/.ssh/authorized_keys autoriza o acesso como root, mas não como outro usuário do sistema.

2. Verificar a Instalação do OpenSSH

No PowerShell, confirme que o OpenSSH está disponível:

ssh -V

No Windows 10 e no Windows 11, o cliente pode ser instalado em Configurações > Sistema > Recursos opcionais > Adicionar um recurso > Cliente OpenSSH.

Em Linux e macOS, ele normalmente já está disponível ou pode ser instalado pelo gerenciador de pacotes do sistema.

3. Localizar ou Criar o Diretório de Configuração

No Windows, os arquivos do usuário ficam normalmente em:

C:\Users\SEU_USUARIO\.ssh\

Crie o diretório caso ele ainda não exista:

$SshDir = Join-Path $env:USERPROFILE ".ssh"
New-Item -ItemType Directory -Path $SshDir -Force

No Linux e no macOS, o caminho equivalente é:

~/.ssh/

4. Gerar as Chaves

É preferível gerar um par de chaves diferente para cada cliente. Assim, um dispositivo perdido, comprometido ou desativado pode ter seu acesso revogado sem afetar os demais.

No PowerShell:

ssh-keygen -t ed25519 -a 100 `
    -C "alias_cliente" `
    -f "$env:USERPROFILE\.ssh\alias_servidor"

O comando cria dois arquivos:

Arquivo Função Pode ser compartilhado?
alias_servidor chave privada não
alias_servidor.pub chave pública sim

Nunca envie a chave privada por e-mail, mensagem, armazenamento público ou repositório Git.

5. Cadastrar a Chave Pública no Servidor

Exiba a chave pública no Windows:

Get-Content "$env:USERPROFILE\.ssh\alias_servidor.pub"

Copie a linha inteira, que normalmente começa com:

ssh-ed25519

Acesse o servidor por outro meio já disponível, como:

  • um computador previamente autorizado;
  • o console web do provedor;
  • autenticação por usuário e senha, caso esteja habilitada;
  • outro mecanismo de acesso administrativo disponível.

Então, depois dessa configuração:

  • A chave privada deve ser mantida no cliente.
  • A chave pública que ainda está no cliente pode ser apagada, embora normalmente seja mantida por conveniência.

Em todo caso, no cliente, a chave pública pode ser recriada posteriormente a partir da chave privada através do comando:

ssh-keygen -y -f "$env:USERPROFILE\.ssh\alias_servidor"

Por isso, o arquivo realmente crítico é a chave privada. Se você a perder e não tiver backup, aquele par de chaves deixa de ser utilizável para autenticação.

Verificar as Chaves Autorizadas no Servidor

Verifique qual usuário está autenticado na sessão:

whoami

O resultado deve corresponder ao mesmo usuário que será informado posteriormente no campo User do arquivo de configuração SSH.

O símbolo ~ representa o diretório pessoal da conta atual. Assim, quando whoami retorna root, o caminho:

~/.ssh/authorized_keys

representa:

/root/.ssh/authorized_keys

Prepare o diretório e o arquivo caso ainda não existam:

mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Abra o arquivo com o editor nano:

nano ~/.ssh/authorized_keys

Cole a chave pública em uma nova linha. Cada computador autorizado deve ocupar uma linha completa, por exemplo:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... alias_cliente

Não substitua nem apague as linhas existentes, pois elas podem autorizar outros computadores que ainda precisam acessar o servidor.

Depois de editar, confirme as permissões:

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

6. Criar o Alias no Arquivo SSH

Edite ou crie o arquivo abaixo, sem extensão:

C:\Users\SEU_USUARIO\.ssh\config

Adicione uma entrada como esta:

Host <alias_servidor>
    HostName <addr_servidor>
    User <user_servidor>
    Port 22
    IdentityFile ~/.ssh/alias_servidor
    IdentitiesOnly yes

Substitua:

  • alias_servidor pelo nome curto que será utilizado nos comandos e scripts;
  • addr_servidor pelo endereço IP ou domínio real do servidor;
  • user_servidor pela mesma conta em cujo authorized_keys a chave pública foi adicionada;
  • 22 pela porta SSH, caso o servidor utilize outra;
  • IdentityFile pelo caminho da chave privada criada.

7. Fazer a Primeira Conexão

Conecte utilizando somente o alias:

ssh alias_servidor

Se a chave privada possuir senha, ela será solicitada.

Para diagnosticar uma falha sem alterar nenhuma configuração, utilize o modo detalhado:

ssh -vvv alias_servidor

8. Usar o Agente SSH Opcionalmente

O ssh-agent pode manter uma chave privada desbloqueada em memória durante a sessão, evitando que sua senha precise ser digitada a cada nova conexão.

No PowerShell executado como administrador, habilite o serviço uma vez:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

Depois, em um terminal normal, adicione a chave:

ssh-add "$env:USERPROFILE\.ssh\alias_servidor"
ssh-add -l

O agente é uma conveniência, não um requisito. O campo IdentityFile permite que o cliente SSH localize a chave privada mesmo sem o uso do ssh-agent.