Changer le port SSH et le mot de passe root d'un VPS Linux en toute sécurité
Déplacer SSH hors du port 22 n'arrête pas un attaquant déterminé, mais supprime l'essentiel du bruit des scans automatiques dans vos journaux, et changer le mot de passe root est la première chose à faire sur un nouveau serveur. Ce guide montre comment changer le port SSH et le mot de passe root d'un VPS Linux sans perdre l'accès : modification de sshd_config, étiquetage SELinux du port sous Rocky Linux et AlmaLinux, ouverture du pare-feu, gestion de l'unité ssh.socket sur Ubuntu 22.10 et 24.04, et retour arrière par la console VNC en cas de problème. Il concerne Debian, Ubuntu, CentOS 7 et Rocky/AlmaLinux 8 et 9 sur les serveurs cloud et dédiés JUSTG.
Étape 1 : Changer le mot de passe root
Faites-le d'abord, tant que la connexion habituelle fonctionne. C'est aussi ce mot de passe root que vous saisirez dans la console VNC en cas de dépannage : rangez-le dans un gestionnaire de mots de passe. Visez au moins 16 caractères aléatoires.
# Generate a random 24-character password (optional)
openssl rand -base64 18
# Set the new root password (type it twice)
passwd root
Pour un autre compte, utilisez passwd nom_utilisateur.
Étape 2 : Choisir un nouveau port SSH
Choisissez un port libre entre 1024 et 49151, par exemple 2222 ou 22022, et vérifiez qu'aucun autre service ne l'utilise. Les exemples suivants utilisent 2222.
# Nothing should be listening on the new port yet
ss -tlnp | grep ':2222' || echo "port 2222 is free"
Étape 3 : Ajouter le nouveau port dans sshd_config
Faites une sauvegarde, puis configurez sshd pour écouter sur les deux ports, l'ancien et le nouveau. Garder le port 22 pendant l'opération évite qu'une erreur ultérieure ne vous bloque dehors.
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
Étape 4 : Autoriser le port SSH dans SELinux (Rocky Linux / AlmaLinux / CentOS)
Sur les systèmes Red Hat, SELinux n'autorise sshd qu'à écouter sur les ports étiquetés ssh_port_t. Sans cette étape, sshd échoue sur le nouveau port avec une erreur de bind « Permission denied ». Debian et Ubuntu n'utilisent pas SELinux par défaut.
# 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
Étape 5 : Ouvrir le nouveau port SSH dans le pare-feu
# 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
Étape 6 : Redémarrer SSH (et gérer ssh.socket sur Ubuntu 22.10+ et 24.04)
Vérifiez la syntaxe, puis redémarrez le service. Votre session actuelle reste ouverte.
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
Depuis Ubuntu 22.10, SSH démarre par activation de socket systemd : c'est ssh.socket qui détient le port d'écoute, et redémarrer ssh seul ne le change pas. Utilisez la méthode adaptée à votre version :
# 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
Étape 7 : Tester le nouveau port SSH dans une deuxième session
# 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 » signifie généralement que le pare-feu bloque encore le port ; « Connection refused » que sshd n'écoute pas dessus : vérifiez SELinux, ssh.socket et ss -tlnp.
Étape 8 : Fermer le port 22
Quand le nouveau port fonctionne, retirez l'ancien de la configuration SSH et du pare-feu, redémarrez une dernière fois et testez à nouveau depuis un nouveau terminal.
# 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
Étape 9 : Revenir en arrière via la console VNC
Si vous êtes bloqué dehors, la console VNC reste disponible car elle ne passe ni par le réseau ni par SSH. Connectez-vous à l'espace client JUSTG → Mes produits et services → sélectionnez le VPS → panneau de gestion pour ouvrir la console ; si vous ne la trouvez pas, ouvrez un ticket. Connectez-vous en root avec le mot de passe de l'étape 1, puis rétablissez :
# 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
Questions fréquentes
Changer le port SSH suffit-il à sécuriser le serveur ?
Cela réduit le bruit des robots dans les journaux, mais ce n'est pas une protection en soi. Associez-le à la connexion par clé SSH, à la désactivation du mot de passe et à un pare-feu.
Pourquoi Ubuntu 24.04 écoute-t-il toujours sur le port 22 ?
Parce que ssh.socket détient le port. Lancez systemctl daemon-reload puis systemctl restart ssh.socket, ou désactivez le socket et utilisez ssh.service comme à l'étape 6.
sshd ne démarre plus sur Rocky Linux après le changement de port.
C'est presque toujours SELinux. Exécutez journalctl -u sshd -n 20 ; en cas d'erreur de bind, ajoutez le port avec semanage port -a -t ssh_port_t -p tcp 2222 et redémarrez.
Si vous ne parvenez toujours pas à vous connecter après le changement de port SSH, ouvrez un ticket sur https://www.justg.com/submitticket.php et le support technique JUSTG vous aidera.