16 min de leitura · Guia técnico
Restringir acesso SSH por chave pública no Rocky Linux 9 significa configurar o servidor para aceitar apenas conexões autenticadas via par de chaves criptográficas, desabilitando o login por senha. Para aplicar essa configuração, siga estes passos:
- Gere um par de chaves Ed25519 na máquina cliente com
ssh-keygen. - Copie a chave pública para o servidor com
ssh-copy-idou manualmente. - Ajuste as permissões do diretório
~/.sshe do arquivoauthorized_keys. - Edite o arquivo
/etc/ssh/sshd_configpara habilitar autenticação por chave e desabilitar senha. - Reinicie o serviço
sshde teste a conexão em uma nova sessão antes de fechar a atual.
Pré-requisitos para configurar autenticação SSH por chave pública
- Servidor com Rocky Linux 9 instalado e atualizado (
dnf update -y). - Acesso root ou usuário com privilégios
sudono servidor. - OpenSSH Server instalado e em execução (
sshdativo). - Cliente SSH disponível na máquina local: Linux/macOS (nativo), Windows 10/11 (OpenSSH nativo no PowerShell) ou PuTTY.
- Conexão SSH ativa com autenticação por senha ainda funcionando — não feche esta sessão durante o processo.
- Endereço IP do servidor e nome do usuário de destino em mãos.
Gerando o par de chaves SSH Ed25519 na máquina cliente
A autenticação SSH por chave pública funciona com um par criptográfico: a chave privada fica na máquina do administrador e a chave pública é instalada no servidor. O algoritmo Ed25519 é o recomendado atualmente por oferecer segurança elevada com chaves menores e operações mais rápidas do que RSA 2048.
Execute o comando abaixo na sua máquina local (não no servidor):
ssh-keygen -t ed25519 -C "admin@meuservidor-rocky9" -f ~/.ssh/id_ed25519_rocky
O parâmetro -C adiciona um comentário identificador à chave — útil quando você gerencia múltiplos servidores. O parâmetro -f define o nome do arquivo, evitando sobrescrever chaves existentes.
Ao rodar este comando, você verá a seguinte saída e será solicitado a definir uma passphrase:
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/usuario/.ssh/id_ed25519_rocky
Your public key has been saved in /home/usuario/.ssh/id_ed25519_rocky.pub
The key fingerprint is:
SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX admin@meuservidor-rocky9
Atenção: Defina uma passphrase forte para proteger a chave privada. Mesmo que alguém obtenha o arquivo da chave privada, não conseguirá usá-la sem a passphrase.
Dois arquivos serão criados: id_ed25519_rocky (chave privada — nunca compartilhe) e id_ed25519_rocky.pub (chave pública — será copiada para o servidor).
Copiando a chave pública para o Rocky Linux 9
Com o par de chaves gerado, o próximo passo é instalar a chave pública no servidor. O método mais simples usa o utilitário ssh-copy-id, disponível em sistemas Linux e macOS:
ssh-copy-id -i ~/.ssh/id_ed25519_rocky.pub usuario@IP_DO_SERVIDOR
Ao rodar este comando, você verá:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/usuario/.ssh/id_ed25519_rocky.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -i ~/.ssh/id_ed25519_rocky usuario@IP_DO_SERVIDOR"
and check to make sure that only the key(s) you wanted were added.
Se você estiver no Windows usando PowerShell, o ssh-copy-id pode não estar disponível. Nesse caso, copie manualmente:
type $env:USERPROFILE\.ssh\id_ed25519_rocky.pub | ssh usuario@IP_DO_SERVIDOR "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Para verificar se a chave foi instalada corretamente, conecte-se ao servidor e inspecione o arquivo:
cat ~/.ssh/authorized_keys
A saída deve exibir a linha com ssh-ed25519 AAAA... seguida do comentário que você definiu.
Ajustando permissões do diretório .ssh no servidor
O OpenSSH é rigoroso quanto às permissões de arquivos — se as permissões estiverem incorretas, a autenticação por chave será silenciosamente recusada. Este é um dos erros mais comuns ao configurar chaves SSH no Rocky Linux 9.
Conectado ao servidor, execute:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -la ~/.ssh/
A saída esperada deve mostrar:
drwx------. 2 usuario usuario 29 Jan 15 10:00 .
drwx------. 5 usuario usuario 128 Jan 15 10:00 ..
-rw-------. 1 usuario usuario 115 Jan 15 10:00 authorized_keys
O diretório .ssh deve ter permissão 700 (somente o dono lê, escreve e executa) e o arquivo authorized_keys deve ter permissão 600 (somente o dono lê e escreve). Qualquer permissão mais aberta fará o SSH ignorar o arquivo.
Se o servidor usa SELinux (padrão no Rocky Linux 9), verifique também o contexto de segurança:
ls -Z ~/.ssh/authorized_keys
O contexto deve ser system_u:object_r:ssh_home_t:s0. Se estiver incorreto, restaure com:
restorecon -Rv ~/.ssh/
Configurando o sshd_config para restringir acesso por chave pública
Com a chave instalada e as permissões corretas, é hora de editar o arquivo de configuração do OpenSSH para habilitar a autenticação por chave e, opcionalmente, desabilitar a autenticação por senha. Esta etapa é o núcleo da restrição de acesso SSH no Rocky Linux 9.
Atenção: Antes de editar o sshd_config, abra uma nova janela de terminal e confirme que consegue conectar via chave. Nunca feche a sessão ativa antes de validar o acesso alternativo.
Faça um backup do arquivo original:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Abra o arquivo para edição:
vi /etc/ssh/sshd_config
Localize e ajuste as seguintes diretivas (descomente removendo o # se necessário):
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
PermitRootLogin prohibit-password
Explicação de cada diretiva:
- PubkeyAuthentication yes — habilita explicitamente a autenticação por chave pública.
- AuthorizedKeysFile .ssh/authorized_keys — define o caminho do arquivo com as chaves autorizadas.
- PasswordAuthentication no — desabilita login por senha após confirmar que a chave funciona.
- ChallengeResponseAuthentication no — desabilita autenticação por desafio-resposta (inclui senhas via PAM).
- PermitRootLogin prohibit-password — permite login root apenas via chave, nunca por senha.
Valide a sintaxe do arquivo antes de reiniciar o serviço:
sshd -t
Se não houver saída, a configuração está correta. Reinicie o serviço:
systemctl restart sshd
Verifique se o serviço está ativo:
systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-01-15 10:05:00 UTC; 3s ago
Testando a conexão SSH com chave pública no Rocky Linux 9
Antes de encerrar qualquer sessão ativa, valide o acesso por chave em uma nova janela de terminal. Este passo é crítico para evitar ser bloqueado fora do servidor.
Na máquina cliente, execute:
ssh -i ~/.ssh/id_ed25519_rocky -v usuario@IP_DO_SERVIDOR
O parâmetro -v ativa o modo verbose, exibindo detalhes do processo de autenticação. Procure pelas linhas:
debug1: Offering public key: /home/usuario/.ssh/id_ed25519_rocky ED25519 SHA256:...
debug1: Server accepts key: /home/usuario/.ssh/id_ed25519_rocky ED25519 SHA256:...
Authenticated to IP_DO_SERVIDOR ([IP_DO_SERVIDOR]:22) using "publickey".
Se a conexão for estabelecida sem solicitar senha (apenas a passphrase da chave, se definida), a configuração está funcionando corretamente.
Para simplificar conexões futuras, configure o arquivo ~/.ssh/config na máquina cliente:
Host rocky9-servidor
HostName IP_DO_SERVIDOR
User usuario
IdentityFile ~/.ssh/id_ed25519_rocky
IdentitiesOnly yes
Com esta configuração, basta executar ssh rocky9-servidor para conectar. Para mais detalhes sobre como acessar servidores VPS Linux, consulte o guia Acessando servidores VPS Linux da AviraHost.
Configurando o firewall para proteger a porta SSH no Rocky Linux 9
Restringir a autenticação SSH por chave pública é uma camada de segurança fundamental, mas combiná-la com regras de firewall eleva significativamente a proteção do servidor. O Rocky Linux 9 usa o firewalld como gerenciador de firewall padrão.
Verifique se o firewalld está ativo:
systemctl status firewalld
Confirme que a porta SSH está liberada:
firewall-cmd --list-services
cockpit dhcpv6-client ssh
Se você alterou a porta padrão do SSH (recomendado para reduzir bots), atualize o firewall:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
Se quiser restringir o acesso SSH apenas a IPs específicos (por exemplo, o IP do seu escritório), use rich rules:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="SEU_IP/32" service name="ssh" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" drop'
firewall-cmd --reload
Atenção: Substitua SEU_IP pelo seu endereço IP real antes de executar. Aplicar estas regras sem o IP correto bloqueará seu próprio acesso ao servidor. Veja também as Dicas de Otimização de Servidores Linux para outras práticas recomendadas de segurança.
Problemas comuns e como resolver
Sintoma: Permission denied (publickey) ao tentar conectar
Causa: As permissões do diretório ~/.ssh ou do arquivo authorized_keys estão incorretas, ou a chave pública não foi copiada corretamente para o servidor. O OpenSSH ignora silenciosamente arquivos com permissões muito abertas.
Solução: Conecte ao servidor por outro método (console VNC/KVM no painel da hospedagem) e execute chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys. Verifique também se o conteúdo de authorized_keys corresponde exatamente ao conteúdo do arquivo .pub gerado. No Rocky Linux 9 com SELinux ativo, execute restorecon -Rv ~/.ssh/ para restaurar o contexto de segurança correto.
Sintoma: SSH continua pedindo senha mesmo após configurar a chave
Causa: A diretiva PasswordAuthentication ainda está como yes no sshd_config, ou existe um arquivo de configuração adicional em /etc/ssh/sshd_config.d/ que sobrescreve a configuração principal.
Solução: Verifique se há arquivos no diretório de configuração adicional com ls /etc/ssh/sshd_config.d/ e inspecione cada um. No Rocky Linux 9, o arquivo 50-redhat.conf pode existir neste diretório e sobrescrever configurações. Edite ou remova as diretivas conflitantes e reinicie o sshd com systemctl restart sshd.
Sintoma: Serviço sshd falha ao reiniciar após editar o sshd_config
Causa: Erro de sintaxe no arquivo /etc/ssh/sshd_config, como espaços extras, caracteres inválidos ou diretivas digitadas incorretamente.
Solução: Execute sshd -t para validar a sintaxe antes de reiniciar. O comando exibirá a linha exata com o erro, por exemplo: /etc/ssh/sshd_config line 42: Bad configuration option: PasswordAuthenticaton. Corrija o erro, valide novamente e então reinicie o serviço. Se o serviço já estiver parado, restaure o backup com cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config.
Sintoma: Chave SSH funciona mas conexão cai após alguns minutos de inatividade
Causa: O servidor ou o cliente encerram conexões ociosas por timeout. No servidor, as diretivas ClientAliveInterval e ClientAliveCountMax controlam esse comportamento.
Solução: Adicione ao /etc/ssh/sshd_config as linhas ClientAliveInterval 60 e ClientAliveCountMax 3. Isso faz o servidor enviar um sinal keepalive a cada 60 segundos e encerrar a conexão somente após 3 falhas consecutivas. Reinicie o sshd após a alteração.
Perguntas frequentes sobre autenticação SSH por chave pública
É seguro desativar a autenticação por senha no SSH?
Sim, desde que você tenha testado e confirmado que o acesso por chave pública funciona corretamente antes de desativar a senha. A autenticação por chave pública é criptograficamente mais forte do que senhas, pois exige posse da chave privada, que nunca trafega pela rede. Sempre mantenha uma cópia de segurança da chave privada em local seguro.
O que acontece se eu perder minha chave privada SSH?
Se você perder a chave privada e não tiver outro método de acesso configurado (como console VNC/KVM ou outro usuário com chave válida), ficará bloqueado fora do servidor. Por isso, é essencial manter backups da chave privada em local seguro e, idealmente, configurar acesso de emergência via console no painel da hospedagem antes de desativar a autenticação por senha.
Posso usar a mesma chave SSH em vários servidores?
Tecnicamente sim, mas não é recomendado do ponto de vista de segurança. Se a chave privada for comprometida, todos os servidores que a utilizam ficam expostos. A prática recomendada é gerar um par de chaves distinto para cada servidor ou grupo de servidores críticos, facilitando a revogação pontual em caso de incidente.
Como adicionar múltiplos usuários com chaves SSH diferentes no mesmo servidor?
Cada usuário do sistema possui seu próprio arquivo ~/.ssh/authorized_keys. Para adicionar um novo usuário com chave própria, crie o usuário com useradd, crie o diretório ~/.ssh com permissão 700 e adicione a chave pública no arquivo authorized_keys com permissão 600. Cada linha do arquivo authorized_keys corresponde a uma chave autorizada distinta.
Como verificar se a autenticação por chave SSH está funcionando antes de desativar a senha?
Abra uma nova sessão de terminal sem fechar a sessão atual e tente conectar com o comando ssh -i ~/.ssh/id_ed25519_rocky usuario@ip-do-servidor. Se a conexão for estabelecida sem solicitar senha, a chave está funcionando corretamente. Só então edite o sshd_config para desativar PasswordAuthentication. Nunca feche a sessão ativa antes de confirmar o acesso alternativo.
Conclusão
Configurar a autenticação SSH por chave pública no Rocky Linux 9 é uma das medidas de segurança mais eficazes para proteger o acesso remoto ao servidor. Ao seguir este guia, você:
- Gerou um par de chaves Ed25519 seguro e instalou a chave pública no servidor com as permissões corretas, incluindo o contexto SELinux necessário no Rocky Linux 9.
- Configurou o
sshd_configpara aceitar apenas autenticação por chave, desabilitando senhas e validando a sintaxe antes de reiniciar o serviço. - Testou a conexão em uma nova sessão antes de encerrar a sessão ativa, evitando o risco de bloqueio, e aprendeu a diagnosticar os erros mais comuns neste processo.
Leia também
- Passo a passo para configurar WireGuard VPN no Rocky Linux 9
- Como solucionar problemas de timeout no SSH em VPS Linux: Guia Completo
- Como solucionar problemas de acesso SSH no VPS Linux: Guia Completo
Precisa de ajuda com SSH e segurança no seu servidor?
Configurar autenticação por chave pública é mais simples quando você tem uma infraestrutura confiável como base. Os servidores VPS da AviraHost rodam Rocky Linux 9 e outras distribuições enterprise, com acesso root completo e suporte técnico disponível para auxiliar na configuração inicial de segurança.