Otimizar SSH com chave pública no Rocky Linux 9

16 min de leitura · · SSH, chave-publica, Rocky Linux, segurança, AviraHost, autenticação, servidor · 0

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:

  1. Gere um par de chaves Ed25519 na máquina cliente com ssh-keygen.
  2. Copie a chave pública para o servidor com ssh-copy-id ou manualmente.
  3. Ajuste as permissões do diretório ~/.ssh e do arquivo authorized_keys.
  4. Edite o arquivo /etc/ssh/sshd_config para habilitar autenticação por chave e desabilitar senha.
  5. Reinicie o serviço sshd e 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 sudo no servidor.
  • OpenSSH Server instalado e em execução (sshd ativo).
  • 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_config para 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

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.

Conheça os planos de VPS da AviraHost


Esta resposta foi útil?