Quando se fala em acesso remoto o SSH é uma referência, e por mais seguras que sejam as senhas, sempre existe uma possibilidade de que alguém descobri-las.
Mas o ssh tem uma resposta para esse problema, é a autenticação usando chaves SSH. Esse mecanismo utiliza criptografia assimétrica, reduzindo drasticamente os riscos de ataques de força bruta.
Neste post, você vai entender o que é a autenticação usando chaves SSH, como funciona, como gerar chaves e em seguida como utilizá-las para se identificar no servidor remoto através do ssh.
O que é Autenticação usando chaves SSH ?
A autenticação usando chaves SSH é um método mais seguro para fazer login em servidores através de acesso remoto via ssh, substituindo senhas por um par de chaves criptográficas (pública e privada).
A chave privada fica no cliente e é protegida por um passphrase(frase senha), e a chave pública é instalada no servidor (que será acessado), permitindo acesso sem digitar senha(caso não use uma frase senha). Uma frase senha é opcional quando se cria a chave privada.
Mesmo o invasor tendo acesso chave SSH privada, ele pode não conseguir conectar ao servidor se uma frase senha tenha sido inserida durante a criação da chave privada, assim, será necessário fornecer o passphrase sempre que for usar essa chave privada.
Por que usar Autenticação com chaves SSH ?
Porque é muito mais seguro que usar somente senha via ssh pela rede, no caso da autenticação usando chaves ssh existe uma segurança de dois níveis:
- É necessário que o cliente que vai iniciar a conexão com o servidor tenha acesso à chave privada.
- É preciso saber a passphrase(frase senha) da mesma.
A passphrase é usada apenas para descriptografar a chave na máquina cliente, ela nunca trafega pela rede. Isso significa que utilizar força bruta na rede não será possível contra a frase senha.
Utilizar autenticação usando chaves SSH traz diversas vantagens em relação ao login tradicional:
– Maior segurança: Elimina o risco de senhas fracas ou reutilizadas.
– Proteção contra ataques de força bruta: Não há senha de usuários do servidor trafegando na rede no momento da autenticação via ssh.
– Automação segura: ideal para scripts, deploys e pipelines CI/CD, caso a chave privada não seja protegida com uma frase senha.
Por esses motivos, a Autenticação usando chaves SSH é considerada uma prática extremamente recomendada na atualidade para servidores.
Como funciona a autenticação usando chaves SSH ?
O processo ocorre da seguinte forma:
1. O usuário a partir do cliente precisa fornecer a frase senha da chave privada para utilizá-la. Caso não exista frase senha essa etapa é pulada.
2. O cliente se conecta ao servidor via SSH.
3. O servidor solicita a autenticação.
4. O cliente prova que possui a chave privada correspondente à chave pública cadastrada no servidor.
5. O servidor valida essa prova criptográfica.
6. Caso a validação seja feita com sucesso o acesso é liberado.
As chaves públicas autorizadas ficam armazenadas no arquivo “~/.ssh/authorized_keys” do usuário no servidor.
Como gerar um par de chaves ssh ?
Para gerar uma chave SSH, basta executar o comando ssh-keygen(no cliente):
ssh-keygenDurante o processo, você poderá escolher o local onde a chave será salva, veja o exemplo na imagem abaixo:

Caso não selecione uma localização, por padrão, as chaves serão armazenadas no diretório “.ssh” que fica no diretório home da conta de usuário que executou o comando ssh-keygen.
Também é possível definir uma passphrase, que adiciona uma camada extra de segurança como já explicado. Caso não queira usar uma frase senha apenas clique na tecla ENTER duas vezes.

Ao final, serão criados dois arquivos, a chave privada será chamada de id_ed25519(ed25519 é o algoritmo selecionado automaticamente) e a chave pública associada será chamada de id_ed25519.pub.

Para gerar chaves com um algoritmo diferente, ao executar o comando ssh-keygen passe a opção -t seguido do nome do algoritmo que será usado para gerar as chaves. Por exemplo, para gerar chaves com o algoritmo rsa execute:
ssh-keygen -t rsaA chave pública é a que deve ser enviada para o servidor. Após gerar a chave com ssh keygen, copie para o servidor usando o comando ssh-copy-id , a partir do cliente. O comando ssh-copy-id usa o caso queira aprender mais sobre o sftp leia mais aqui.
Por exemplo, vamos supor que o endereço IPv4 do servidor é 10.10.10.13 e a conta de usuário no servidor que vai armazenar a chave pública é linus, o comando completo seria:
ssh-copy-id [email protected]
O comando ssh-copy-id copia o conteúdo da chave pública que está no cliente para o arquivo authorized_keys da conta de usuário do servidor.
A chave pública armazenada no arquivo authorized_keys no diretório .ssh que fica dentro do diretório home da conta de usuário, nesse exemplo ficaria em: /home/linus/.ssh/authorized_keys do usuário no servidor.
Após gerar o par de chaves e copiar a chave pública para o servidor, o acesso remoto via ssh será feito com autenticação usando chaves SSH. Para isso faça login no cliente com a conta de usuário que criou as chaves e teste executando o comando ssh no terminal.
No exemplo do post a conta de usuário remota é linus e o servidor 10.10.10.13, então comando ficaria assim:
ssh [email protected]Se precisar de mais informações sobre o comando ssh ou ssh-keygen, consulte a página de manual do projeto openssh clicando aqui.
Boas práticas de segurança com chaves SSH
Para manter seu ambiente seguro recomendo que além de usar chaves do ssh para autenticação, também aplique os conhecimentos do post que ensino 6 formas de proteger do SSH do servidor.
Garanto que as práticas ensinadas no post mencionado vai reduzir significativamente o risco de acessos não autorizados e deixar o servidor mais seguro.
Conclusão
Se você ainda utiliza autenticação por senha, este é o momento ideal para migrar para chaves SSH e elevar o nível de proteção da sua infraestrutura.
A Autenticação usando chaves SSH é uma solução robusta, segura e eficiente para acesso remoto a servidores. Após configurar você deve ter uma autenticação baseada em chaves configurada e pode fazer login sem fornecer uma senha de conta de usuário do servidor remoto.

