Cómo cambiar el puerto SSH y la contraseña root de un VPS Linux sin riesgos
Sacar SSH del puerto 22 no detiene a un atacante decidido, pero elimina de los registros la mayor parte del ruido de escaneos automáticos, y cambiar la contraseña root es lo primero que conviene hacer en cualquier servidor nuevo. Esta guía explica cómo cambiar el puerto SSH y la contraseña root de un VPS Linux sin perder el acceso: editar sshd_config, etiquetar el puerto en SELinux en Rocky Linux y AlmaLinux, abrir el firewall, manejar la unidad ssh.socket en Ubuntu 22.10 y 24.04 y revertir desde la consola VNC si algo sale mal. Sirve para Debian, Ubuntu, CentOS 7 y Rocky/AlmaLinux 8 y 9 en servidores cloud y dedicados de JUSTG.
Paso 1: Cambia la contraseña root
Hazlo primero, mientras la conexión normal funciona. Esta contraseña root es también la que escribirás en la consola VNC si necesitas recuperar el servidor, así que guárdala en un gestor de contraseñas. Usa al menos 16 caracteres aleatorios.
# Generate a random 24-character password (optional)
openssl rand -base64 18
# Set the new root password (type it twice)
passwd root
Para cambiar la contraseña de otra cuenta, ejecuta passwd nombre_usuario.
Paso 2: Elige un nuevo puerto SSH
Elige un puerto libre entre 1024 y 49151, por ejemplo 2222 o 22022, y comprueba que ningún otro servicio lo use. Los ejemplos usan 2222.
# Nothing should be listening on the new port yet
ss -tlnp | grep ':2222' || echo "port 2222 is free"
Paso 3: Añade el nuevo puerto en sshd_config
Haz una copia de seguridad y configura sshd para escuchar en ambos puertos, el antiguo y el nuevo. Mantener el 22 durante el cambio evita que un error posterior te deje fuera.
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
nano /etc/ssh/sshd_config
# Replace the "#Port 22" line with BOTH ports during the change:
Port 22
Port 2222
Paso 4: Permite el puerto SSH en SELinux (Rocky Linux / AlmaLinux / CentOS)
En sistemas basados en Red Hat, SELinux solo permite que sshd escuche en puertos etiquetados como ssh_port_t. Sin este paso, sshd no arranca en el nuevo puerto y muestra un error de bind «Permission denied». Debian y Ubuntu no usan SELinux por defecto.
# Rocky Linux / AlmaLinux 8, 9
dnf install -y policycoreutils-python-utils
# CentOS 7
yum install -y policycoreutils-python
semanage port -a -t ssh_port_t -p tcp 2222
semanage port -l | grep ssh_port_t
Paso 5: Abre el nuevo puerto SSH en el firewall
# Debian / Ubuntu with UFW
ufw allow 2222/tcp
ufw status
# CentOS / Rocky / AlmaLinux with firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
firewall-cmd --list-ports
Paso 6: Reinicia SSH (y gestiona ssh.socket en Ubuntu 22.10+ y 24.04)
Comprueba la sintaxis y reinicia el servicio. Tu sesión actual no se corta.
sshd -t # syntax check, no output = OK
# Debian, Ubuntu 22.04 and older
systemctl restart ssh
# CentOS / Rocky / AlmaLinux
systemctl restart sshd
# Confirm sshd is listening on both ports
ss -tlnp | grep sshd
Desde Ubuntu 22.10, SSH se inicia mediante activación por socket de systemd: el puerto lo controla ssh.socket, así que reiniciar solo ssh no lo cambia. Usa el método de tu versión:
# Is socket activation in use?
systemctl is-active ssh.socket
# Ubuntu 24.04 (and 23.10+): the Port lines in sshd_config are read
# by a systemd generator, so reload and restart the socket
systemctl daemon-reload
systemctl restart ssh.socket
# Ubuntu 22.10 / 23.04: add the ports to a socket override instead
mkdir -p /etc/systemd/system/ssh.socket.d
cat > /etc/systemd/system/ssh.socket.d/listen.conf <<'EOF'
[Socket]
ListenStream=
ListenStream=22
ListenStream=2222
EOF
systemctl daemon-reload
systemctl restart ssh.socket
# Alternative on any of these Ubuntu releases: go back to the classic service
systemctl disable --now ssh.socket
systemctl enable --now ssh.service
Paso 7: Prueba el nuevo puerto SSH en una segunda sesión
# From a SECOND terminal on your computer
ssh -p 2222 [email protected]
# Optional ~/.ssh/config entry so you can just type "ssh myvps"
Host myvps
HostName 203.0.113.40
Port 2222
User root
«Connection timed out» suele indicar que el firewall aún bloquea el puerto; «Connection refused», que sshd no escucha en él: revisa SELinux, ssh.socket y ss -tlnp.
Paso 8: Cierra el puerto 22
Cuando el nuevo puerto funcione, elimina el antiguo de la configuración SSH y del firewall, reinicia otra vez y vuelve a probar desde una terminal nueva.
# Remove "Port 22" from sshd_config (and from listen.conf on Ubuntu 22.10/23.04)
sed -i '/^Port 22$/d' /etc/ssh/sshd_config
sshd -t && systemctl restart sshd # use "ssh" on Debian/Ubuntu
# Ubuntu 22.10+ with ssh.socket: systemctl daemon-reload && systemctl restart ssh.socket
# UFW
ufw delete allow 22/tcp
ufw delete allow OpenSSH
# firewalld
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
Paso 9: Revierte los cambios desde la consola VNC
Si te quedas fuera, la consola VNC sigue funcionando porque no depende de la red ni de SSH. Entra en el área de clientes de JUSTG → Mis productos y servicios → selecciona el VPS → panel de gestión y abre la consola; si no la encuentras, abre un ticket. Inicia sesión como root con la contraseña del paso 1 y revierte:
# In the VNC console, logged in as root
cp /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config # or re-add "Port 22"
ufw allow 22/tcp # Debian / Ubuntu
firewall-cmd --add-service=ssh # CentOS / Rocky / AlmaLinux (runtime)
systemctl restart ssh || systemctl restart sshd
Preguntas frecuentes
¿Cambiar el puerto SSH hace seguro el servidor?
Reduce el ruido de los bots en los registros, pero no es una protección real por sí solo. Combínalo con acceso SSH por clave, contraseñas desactivadas y un firewall.
¿Por qué Ubuntu 24.04 sigue escuchando en el puerto 22?
Porque ssh.socket mantiene el puerto. Ejecuta systemctl daemon-reload y después systemctl restart ssh.socket, o desactiva el socket y usa ssh.service como en el paso 6.
sshd no arranca en Rocky Linux tras cambiar el puerto. ¿Qué pasa?
Casi siempre es SELinux. Ejecuta journalctl -u sshd -n 20; si ves un error de bind, añade el puerto con semanage port -a -t ssh_port_t -p tcp 2222 y reinicia.
Si después de cambiar el puerto SSH sigues sin poder conectarte, abre un ticket en https://www.justg.com/submitticket.php y el soporte técnico de JUSTG te ayudará.