Como alterar a porta do SSH no Ubuntu, Debian, AlmaLinux e Rocky sem ficar trancado fora: firewall, SELinux, ssh.socket do Ubuntu 24.04 e teste.
Trocar a porta 22 por outra tira o servidor do alvo da maioria dos robôs que testam senhas o dia inteiro e deixa os logs mais limpos. Não substitui a segurança de verdade (chave SSH e fail2ban), mas ajuda. O risco está na ordem: se a porta nova não estiver liberada no firewall ou no SELinux quando o SSH reiniciar, você perde o acesso. Por isso o procedimento abaixo mantém a porta 22 aberta até a nova ser testada.
Antes de começar
- Acesso root ou com
sudo, e de preferência acesso ao console do servidor como plano B. - Escolha a porta: um número entre 1024 e 65535 que nenhum serviço use. Nos exemplos,
2222. Em servidor cPanel, evite as portas do próprio cPanel (2082 a 2096 e outras; veja portas usadas pelo cPanel). - Confira se ela está livre; o comando abaixo não pode mostrar nada:
sudo ss -tlnp | grep ':2222 '
Passo 1: libere a porta nova no firewall
Libere a nova porta sem fechar a 22. Use o bloco do firewall que o seu servidor tem:
UFW (Ubuntu e Debian):
sudo ufw allow 2222/tcp
firewalld (AlmaLinux e Rocky):
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
CSF (comum em servidores cPanel): edite /etc/csf/csf.conf, acrescente 2222 à lista da linha TCP_IN (e da TCP6_IN, se o servidor usa IPv6) e recarregue:
sudo csf -r
Se houver um firewall externo, no painel do provedor ou na rede, libere a porta nele também.
Passo 2: avise o SELinux (só AlmaLinux e Rocky)
Com o SELinux ativo, o SSH só pode usar portas registradas para ele. Veja o estado com getenforce: se responder Enforcing ou Permissive, registre a porta:
sudo dnf install policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh_port_t
A última linha deve listar 2222, 22. No Ubuntu e no Debian o SELinux não vem ativo; pule este passo.
Passo 3: configure a porta no SSH
Abra o arquivo de configuração:
sudo nano /etc/ssh/sshd_config
Procure a linha #Port 22, tire o # e acrescente a porta nova logo abaixo. As duas ficam ativas durante o teste:
Port 22
Port 2222
Confira se não há outra linha Port nos arquivos complementares e valide a sintaxe (sem resposta = tudo certo):
sudo grep -ri '^port' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
sudo sshd -t
Passo 4: aplique a mudança
Aqui cada sistema tem um comando diferente.
Ubuntu 24.04: o SSH usa ativação por socket do systemd, e quem escuta a porta é o ssh.socket. Confirme com systemctl is-active ssh.socket; se responder active, aplique assim (só reiniciar o serviço ssh não troca a porta):
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Ubuntu 22.04 e Debian 12 (ou Ubuntu 24.04 com o ssh.socket inativo):
sudo systemctl restart ssh
AlmaLinux e Rocky Linux:
sudo systemctl restart sshd
Confira se as duas portas estão escutando:
sudo ss -tlnp | grep -E ':(22|2222) '
Passo 5: teste a porta nova
Em outra janela do terminal, no seu computador:
ssh -p 2222 [email protected]
Se entrar, siga para o último passo. Se não, a porta 22 continua funcionando e você corrige sem pressa (veja os problemas comuns abaixo).
Passo 6: feche a porta 22
- Apague a linha
Port 22do/etc/ssh/sshd_config, rodesudo sshd -te aplique de novo com o comando do passo 4. - Remova a regra antiga do firewall. UFW:
sudo ufw delete allow OpenSSH(ousudo ufw delete allow 22/tcp, conforme foi criada). firewalld:sudo firewall-cmd --permanent --remove-service=sshesudo firewall-cmd --reload. CSF: tire o22doTCP_INe rodesudo csf -r. - Teste mais uma vez numa janela nova antes de fechar a sessão antiga.
Depois da troca
- fail2ban: se ele protege o SSH, informe a porta nova (
port = 2222) na seção[sshd]do/etc/fail2ban/jail.locale reinicie o fail2ban. Sem isso, os bloqueios vão para a porta errada. Veja como proteger o SSH com fail2ban. - Programas que usam SSH: o
scpe osftpusam-P 2222(P maiúsculo); no FileZilla, no PuTTY e no WinSCP, preencha o campo de porta. - Atalho no seu computador: acrescente ao
~/.ssh/confige conecte só comssh meuservidor:Host meuservidor HostName 203.0.113.10 Port 2222 User usuario
Nas versões 22.10 a 23.10 do Ubuntu, já fora de suporte, a porta era definida direto no ssh.socket. Se o seu servidor ainda usa uma delas, atualize para a 24.04.
Problemas comuns
Connection refused na porta nova
O SSH não está escutando nela. No Ubuntu 24.04, quase sempre faltou o daemon-reload com o restart ssh.socket. Confira com sudo ss -tlnp.
Connection timed out na porta nova
O firewall está bloqueando. Revise o passo 1, inclusive o firewall externo do provedor.
Bind to port 2222 on 0.0.0.0 failed: Permission denied
Aparece em journalctl -u sshd no AlmaLinux e no Rocky: o SELinux barrou a porta. Faça o passo 2 e reinicie o sshd.
ValueError: Port tcp/2222 already defined
A porta já está registrada no SELinux para outro serviço. Troque o -a por -m no comando do semanage, ou escolha outra porta.
Fiquei sem acesso nenhum
Entre pelo console do servidor, volte o Port 22 e reinicie o SSH. Se o servidor é da POP Hosting e você não tem console, abra um chamado pela Área do Cliente.