Como Habilitar Logins SSH Sem Senha no Linux

É uma excelente ideia fazer login no seu servidor SSH sem uma senha. Sério, livre-se dela. Não há necessidade de usar uma senha em um dos serviços mais atacados em servidores Linux, certo? Proteger um servidor SSH usando autenticação padrão baseada em senha é uma má ideia. Os atacantes podem facilmente forçar senhas, e quando elas são a única coisa que separa um ator malicioso do seu servidor, você definitivamente deve ficar nervoso.
Índice
- Instalar os Pacotes
- Gerar Sua Chave SSH no Linux
- Enviando Sua Chave para o Host Linux Remoto
- Testando Sua Conexão SSH no Linux
- Configurando SSH para Bloquear Senhas
- Perguntas Frequentes
É por isso que a autenticação baseada em chave RSA é muito melhor. Você pode configurar e proteger seu servidor Linux para permitir acesso apenas de computadores que possuem as chaves RSA que já foram aceitas. Qualquer outra pessoa será rejeitada imediatamente. Como um benefício adicional, você pode criar essas chaves com ou sem uma senha, o que depende totalmente de você. Uma chave forte sem uma senha é aceitável na maioria dos casos, no entanto.
Se você usar dispositivos Linux em casa também, você tem o benefício adicional da conveniência. Digamos que você queira configurar o encaminhamento SSH X do seu workstation Linux para o seu laptop. Você realmente quer digitar sua senha toda vez que executar um programa remoto? Configure chaves SSH, e você não precisará.
Instalar os Pacotes
Existem alguns pacotes que você precisa. Você provavelmente já tem alguns deles, mas é uma boa ideia verificar. Os pacotes são os mesmos tanto no servidor quanto no cliente. No entanto, há também uma boa chance de que ambas as máquinas sejam servidores e clientes uma da outra (situação em casa), então você pode querer ter certeza de que instalou esses pacotes.
O metapacote OpenSSH não é instalado por padrão em sistemas Debian ou Ubuntu. Se você ainda não o tem instalado, pode fazê-lo executando o seguinte comando:
sudo apt install ssh

Gerar Sua Chave SSH no Linux
É muito fácil gerar sua chave SSH no Linux. Basta informar ao OpenSSH que você precisa gerar a chave. Também é uma boa ideia especificar a quantidade de bits com a flag -b e o tipo com -t. Uma chave de 4096 bits é a melhor, pois fornece criptografia mais forte.
ssh-keygen -t ed25519
Primeiro, a utilidade perguntará onde você deseja armazenar a chave. Basta pressionar Enter para o diretório padrão. Quando perguntar por uma senha, deixe em branco para uma chave sem senha e autenticação sem senha. Se você quiser usar uma senha para sua chave, insira-a aqui.
Seu computador levará alguns segundos para gerar sua chave. Quando terminar, ele imprimirá uma representação em arte ASCII da sua chave no terminal.
Enviando Sua Chave para o Host Linux Remoto
Para usar sua chave, você precisará enviá-la para seu servidor remoto. O OpenSSH tem outra utilidade embutida para isso também. Informe onde sua chave está e qual usuário no servidor associá-la.
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@ip_remote_host
Substitua ip_remote_host pelo endereço IP real do host remoto, que você gerenciará via SSH. Substitua username pelo nome de usuário real no host remoto.

É crucial que você use a opção -i para especificar o arquivo de identidade que contém sua chave pública. Se você tentar usar sua chave SSH sem essa opção, pode receber um erro.
Testando Sua Conexão SSH no Linux
Com sua chave SSH no servidor remoto, você pode agora testar se sua conexão funciona corretamente.
Faça login com o seguinte comando:
ssh username@ip_remote_host
O host remoto fará login sem pedir a senha da conta de usuário.

No entanto, se você cometeu um erro durante o processo, o daemon SSH automaticamente voltará para a autenticação por senha para sua conta de usuário. Isso permite que você ainda acesse seu servidor remoto, mesmo que tenha uma chave RSA não funcional.

Configurando SSH para Bloquear Senhas
Para a melhor segurança, você precisa desabilitar logins SSH por senha em seu servidor Linux. Semelhante à habilitação da autenticação de dois fatores no SSH, isso impede que alguém brute-force seu caminho para dentro do seu servidor.

É importante ter certeza de que você pode fazer login de forma confiável com sua chave SSH antes de fazer isso, pois é possível se trancar fora do seu servidor remoto se você tiver uma chave com defeito.
Você pode encontrar o arquivo de configuração para seu daemon SSH em “/etc/ssh/sshd_config.” Abra o arquivo no servidor usando sudo e seu editor de texto preferido. Por exemplo, abra este arquivo usando nano executando o seguinte comando:
sudo nano /etc/ssh/sshd_config
Encontre as linhas abaixo pressionando Ctrl + W e edite-as para que fiquem como no exemplo. Descomente ambas as entradas e altere os valores para no.
PasswordAuthentication no PermitEmptyPasswords no

PasswordAuthentication especifica se deve usar autenticação por senha. Definimos isso como “no” porque queremos usar apenas chaves SSH.
PermitEmptyPasswords especifica se o servidor permite login com uma senha vazia. Você nunca deve permitir isso, então definimos como “no.”
Em seguida, encontre a linha “UsePAM” e altere para “no.” Isso impedirá que o daemon use quaisquer métodos de autenticação (senha, Kerberos, etc.) além das chaves SSH.
UsePAM no

Salve o arquivo pressionando Ctrl + O, depois Ctrl + X e recarregue o servidor SSH.
sudo systemctl restart ssh
Agora que você configurou com sucesso seu servidor para usar apenas chaves SSH para autenticação, qualquer um que tentar fazer login sem uma chave RSA válida será imediatamente negado.

Perguntas Frequentes
Estou recebendo um “Conexão recusada” quando envio minha chave SSH para meu servidor Linux. Como posso corrigir isso?
Certifique-se de que o servidor SSH está em execução no host remoto. Você pode verificar isso executando sudo systemctl status ssh. Se o serviço não estiver em execução, você pode iniciá-lo com este comando: sudo systemctl start ssh.
Se um firewall estiver em execução no servidor, certifique-se de que a porta 22 está aberta. Você pode fazer isso executando sudo ufw status. Se o SSH não estiver listado, você pode habilitá-lo executando este comando: sudo ufw allow ssh.
Recebo um erro “Permissão negada (publickey)” quando tento fazer login. O que devo fazer?
Esse erro significa que você configurou seu servidor para usar chaves para autenticação, mas ainda está tentando fazer login com uma senha. Isso pode ser devido a uma chave RSA ausente ou uma configuração SSH incorreta. Verifique se você copiou sua chave pública para o servidor corretamente e se está especificando a chave pública correta ao se conectar.
Recebo um erro “Verificação da chave do host falhou” quando tento me conectar. Como posso corrigir isso?
Esse erro significa que a chave do host do servidor SSH mudou. Isso pode acontecer se o servidor foi reinstalado. Você pode regenerar uma nova chave pública e copiá-la para o host remoto. Repita os passos deste artigo para regenerar e adicionar a nova chave ao servidor.
É possível usar várias chaves SSH no mesmo servidor Linux remoto?
Sim. Você pode usar a opção -f no OpenSSH para especificar a chave exata que deseja usar para se conectar a um servidor remoto. Por exemplo, executar ssh -f ~/.ssh/id_rsa_2 username@remote_ip_address irá conectá-lo ao seu servidor remoto usando a chave “id_rsa_2” em vez da “id_rsa” padrão.
No entanto, é importante notar que este comando só funcionará se seu servidor remoto já reconhecer sua nova chave. Você precisa primeiro copiá-la para seu servidor remoto usando ssh-copy-id. Semelhante aos passos acima, você pode fazer isso através da autenticação por senha ou chave RSA.
Estou recebendo um erro “Permissão Negada” sempre que tento copiar minha chave SSH para meu servidor.
Esse problema é mais provável que seja devido a um problema de permissões em seu servidor remoto. Na maioria dos casos, a utilidade ssh-copy-id deve resolver adequadamente quaisquer problemas de acesso assim que se conectar ao seu servidor remoto. No entanto, há instâncias em que esse recurso falha e não copia corretamente o “id_rsa” da sua máquina local.
Para corrigir isso, faça login no seu servidor remoto e execute chmod 700 /home/$USER/.ssh/* && chmod 600 /home/$USER/.ssh. Isso definirá os bits de permissão corretos tanto para a pasta “.ssh” quanto para seu conteúdo.
Crédito da imagem: Unsplash. Todas as alterações e capturas de tela por Ramces Red.