- Hardening sem “gambiarras”: aplique segurança no lugar certo com /etc/ssh/sshd_config.d/00-hardening.conf, mantendo suas regras separadas do padrão do sistema.
- Adeus senhas, olá chaves Ed25519: gere a chave no cliente e envie com ssh-copy-id antes de desligar login por senha.
- Socket Activation muda o jogo: no Ubuntu 26.04, quem manda na porta é o ssh.socket, então Port 2222 pode ser ignorado se o socket estiver ativo.
- Troca de porta do jeito certo: faça override com systemctl edit ssh.socket, execute systemctl daemon-reload e reinicie ssh.socket para a nova porta entrar de fato.
- Validação e UFW sem risco de lockout: libere ufw allow 2222/tcp, teste ssh -p 2222 de outro cliente e só depois remova a regra antiga da porta 22.
Ter SSH exposto com configurações padrão é um convite para varredura, tentativa de senha e erro operacional. Neste tutorial, você vai do zero até um servidor OpenSSH “production ready”, com autenticação por chave, senhas desativadas, hardening em arquivo dedicado e firewall ajustado. O ponto crítico no Ubuntu 26.04 é entender o Socket Activation, que muda a forma correta de trocar a porta.
Pré-requisitos e cenário do tutorial
Você vai precisar de:
- Ubuntu 26.04 “Resolute Raccoon”
- OpenSSH Server 9.x
- Acesso privilegiado no servidor (root ou
sudo) - Um segundo dispositivo (cliente) para testar conexões SSH
Exemplos usados (ajuste para o seu ambiente):
- Usuário:
sempreupdate - Hostname do servidor:
ssh-server(pode ser IP) - Porta SSH:
2222 - Autenticação: somente chaves (sem senha)
Entenda em 90 segundos: Socket Activation

No Ubuntu 26.04, o padrão é o Socket Activation do systemd para o SSH. Na prática:
- O
ssh.socketcontrola em qual porta o SSH fica “escutando”. - Se o
ssh.socketestiver ativo (listening), a diretivaPortnosshd_config(incluindo arquivos emsshd_config.d/) pode ser ignorada. - Resultado: você muda a porta no config do sshd, reinicia, e ele continua ouvindo na porta antiga, porque quem manda é o socket.
Antes de tentar trocar a porta, confirme se o socket está ativo:
systemctl status ssh.socketSe aparecer active (listening), você vai precisar fazer override do socket com systemctl edit ssh.socket mais adiante.
Passo 1: instalação e chaves SSH (Ed25519)
1. Instale o servidor OpenSSH
Atualize o índice e instale o pacote:
sudo apt update
sudo apt install openssh-serverHabilite o SSH no boot:
sudo systemctl enable sshConfira se o serviço está rodando:
sudo systemctl status sshOpcional, mas recomendado para este tutorial: verifique o socket activation:
systemctl status ssh.socket2. Gere a chave no cliente (Ed25519)
No seu cliente, gere a chave Ed25519:
ssh-keygen -t ed25519 -C "your_email@example.com"Aceite o caminho padrão quando solicitado. Se quiser, defina uma passphrase para proteção adicional da chave privada.
3. Copie a chave pública para o servidor
Envie a chave para o servidor com ssh-copy-id:
ssh-copy-id sempreupdate@ssh-serverQuando solicitado, informe a senha do usuário no servidor.
4. Teste login por chave antes do hardening
Teste a conexão:
ssh sempreupdate@ssh-serverSe você conectou sem digitar a senha do servidor (exceto passphrase da chave, se você definiu), pode seguir com segurança para o hardening.
Passo 2: criando a configuração de hardening
A recomendação aqui é não alterar o arquivo global padrão e, em vez disso, criar um arquivo dedicado em sshd_config.d/. Isso mantém suas regras de segurança separadas e fáceis de auditar.
1. Verifique overrides existentes em sshd_config.d/
Liste os arquivos existentes:
ls -la /etc/ssh/sshd_config.d/Em servidores provisionados em nuvem, pode existir um arquivo (ex.: 50-cloud-init.conf) que habilita PasswordAuthentication yes. Se encontrar um override desse tipo, remova ou renomeie. Exemplo (remoção):
sudo rm /etc/ssh/sshd_config.d/50-cloud-init.conf2. Crie o arquivo de hardening
Crie o arquivo:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confAdicione a configuração abaixo (ajuste o usuário em AllowUsers e a porta, se necessário):
# /etc/ssh/sshd_config.d/00-hardening.conf
# SSH hardening no Ubuntu 26.04
# Controle de acesso
AllowUsers sempreupdate
PermitRootLogin no
# Autenticação
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 60
# Limites de sessão e mitigação de força bruta
MaxSessions 3
MaxStartups 10:30:60
# Timeouts e keepalive
ClientAliveInterval 300
ClientAliveCountMax 2
# Redução de superfície
X11Forwarding no
# Porta (atenção: pode ser ignorada se ssh.socket estiver ativo)
Port 2222
3. Valide a sintaxe e aplique as mudanças
Valide a configuração:
sudo sshd -tSe não houver saída, a sintaxe está ok.
Perigo: não feche sua sessão atual ainda. Mantenha este terminal aberto como plano de contingência.
Reinicie o serviço:
sudo systemctl restart ssh
Verifique em quais portas o SSH está ouvindo:
sudo ss -tlnp | grep sshSe aparecer :2222, a mudança de porta já está valendo. Se ainda estiver na porta :22, siga para o passo de Socket Activation.
Passo 3: configurando porta personalizada (o jeito certo)
Se o ssh.socket estiver ativo, você precisa ajustar o socket do systemd, porque ele controla a escuta da porta.
1. Crie um override do socket
Abra o editor de override:
sudo systemctl edit ssh.socketCole o conteúdo abaixo:
[Socket]
ListenStream=
ListenStream=0.0.0.0:2222
ListenStream=[::]:2222A linha ListenStream= vazia limpa a configuração padrão antes de definir a nova porta.
2. Recarregue o systemd e reinicie o socket
Não pule o reload:
sudo systemctl daemon-reloadReinicie o socket:
sudo systemctl restart ssh.socketConfirme a nova porta:
sudo ss -tlnp | grep sshPasso 4: firewall e validação
1. Libere a porta no UFW
Permita a porta 2222/tcp:
sudo ufw allow 2222/tcp comment 'SSH custom port'Habilite o UFW (se ainda não estiver ativo):
sudo ufw enableListe as regras:
sudo ufw status numberedSe você já liberou a porta 22 anteriormente, remova a regra antiga:
sudo ufw delete allow 22/tcp2. Teste antes de encerrar a sessão atual
Teste do cliente para o servidor usando a porta nova:
ssh -p 2222 sempreupdate@ssh-serverConfirme que senha está desativada (o teste deve falhar):
ssh -p 2222 -o PubkeyAuthentication=no sempreupdate@ssh-server
Confirme que login de root está bloqueado (o teste deve falhar):
ssh -p 2222 root@ssh-server
Confirme a porta ativa no servidor:
sudo ss -tlnp | grep ssh
Confira configurações efetivas (visão consolidada do daemon):
sudo sshd -T | grep -E "^(port|passwordauthentication|permitrootlogin|allowusers)"
Quando todos os testes estiverem corretos, aí sim você pode encerrar com segurança a sessão antiga.
Checklist final “production ready”
- Chaves configuradas e testadas com
ssh(sem depender de senha). - Hardening aplicado via
/etc/ssh/sshd_config.d/00-hardening.conf. PasswordAuthentication noePermitRootLogin noativos.- Porta
2222em uso. - Se
ssh.socketestá ativo, a porta foi trocada viasystemctl edit ssh.socket, comsystemctl daemon-reload. - UFW liberando apenas
2222/tcp, sem regra antiga para22/tcp.
