Prérequis
- Un serveur sous Ubuntu, Debian, AlmaLinux, Rocky, CentOS, Fedora ou openSUSE : voir nos VPS au Canada
- Une connexion SSH ouverte en root : Se connecter en SSH à votre VPS
- 25 Go de disque libre et 8 Go de RAM
Ce guide installe le serveur dédié Squad avec SteamCMD, l'outil de Valve : un utilisateur dédié, le serveur (14 Go), ses fichiers de réglages (nom, joueurs, administrateurs), un script de démarrage qui porte les ports et le mot de passe RCON, un service, la preuve par RCON que le serveur répond, le pare-feu, la connexion depuis le jeu et la mise à jour. Le serveur occupe 4,5 Go de mémoire vive sans joueur : 8 Go de RAM au minimum. Choisissez votre système ci-dessus. Copiez la commande avec le bouton Copier, collez-la dans votre terminal, et comparez avec le résultat attendu.
1Mettre à jour le système et installer les bibliothèques 32 bits
SteamCMD, l'outil de Valve qui télécharge les serveurs de jeux, est un programme 32 bits : il lui faut les bibliothèques 32 bits du système. On met d'abord le système à jour ; sans cela, l'installation 32 bits échoue sur AlmaLinux, Rocky, CentOS et Fedora (conflit avec une bibliothèque plus ancienne), et SteamCMD ne peut pas joindre Steam sur une Fedora fraîche (certificats absents).
apt update && apt upgrade -y... 212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded. (les nombres dépendent de l'âge de l'image)
dnf upgrade -y... Complete!
dnf upgrade -y... Complete!
zypper -n refresh && zypper -n updateAll repositories have been refreshed. ...
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curldnf install -y glibc.i686 libstdc++.i686dnf install -y glibc.i686 libstdc++.i686zypper -n install glibc-32bit libstdc++6-32bitopenSUSE Leap 16 livre son noyau avec l'exécution des programmes 32 bits désactivée : sans cette étape, SteamCMD répond « Exec format error ». On l'active dans GRUB et on redémarre (reconnectez-vous en SSH après une minute).
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && rebootgrep -o ia32_emulation=1 /proc/cmdlineia32_emulation=1
2Créer un utilisateur dédié et installer SteamCMD
Le serveur ne tourne jamais en root : un utilisateur squad, dont le dossier personnel est /opt/squad, possède SteamCMD et le serveur. Le dossier est créé avant l'utilisateur : sur Rocky et CentOS, SELinux refuse à useradd de le créer lui-même sous /opt.
mkdir -p /opt/squad/server /opt/squad/steamcmd && useradd -r -s /bin/bash -d /opt/squad squad && chown -R squad:squad /opt/squadsu - squad -c "cd /opt/squad/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"linux32 steamcmd.sh
3Télécharger le serveur Squad (14 Go)
SteamCMD télécharge l'application 403240, le serveur dédié Squad : 14 Go, plusieurs minutes. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '403240' (Missing configuration) » sans rien télécharger : relancez la même commande, elle passe.
su - squad -c "/opt/squad/steamcmd/steamcmd.sh +force_install_dir /opt/squad/server +login anonymous +app_update 403240 validate +quit"... Success! App '403240' fully installed.
du -sh /opt/squad/server && ldd /opt/squad/server/SquadGame/Binaries/Linux/SquadGameServer | grep -c 'not found'14G /opt/squad/server 0
4Régler le serveur : nom, joueurs, administrateurs
Les réglages sont dans /opt/squad/server/SquadGame/ServerConfig : Server.cfg (nom affiché, nombre de joueurs, rotation des cartes, règles), Admins.cfg (les administrateurs, par identifiant Steam), MOTD.cfg (le message d'accueil), LayerRotation.cfg (l'ordre des cartes). Les deux commandes ci-dessous changent le nom et le nombre de joueurs, puis déclarent un administrateur : remplacez 76561197960287930 par votre SteamID64 (17 chiffres, visible sur votre profil Steam).
sed -i 's/^ServerName=.*/ServerName="Mon serveur Squad"/; s/^MaxPlayers=.*/MaxPlayers=40/' /opt/squad/server/SquadGame/ServerConfig/Server.cfg && grep -n '^ServerName\|^MaxPlayers' /opt/squad/server/SquadGame/ServerConfig/Server.cfg1:ServerName="Mon serveur Squad" 10:MaxPlayers=40
printf 'Group=Admin:kick,ban,changemap\nAdmin=76561197960287930:Admin\n' > /opt/squad/server/SquadGame/ServerConfig/Admins.cfg && cat /opt/squad/server/SquadGame/ServerConfig/Admins.cfgGroup=Admin:kick,ban,changemap Admin=76561197960287930:Admin
ServerName- Le nom affiché dans la liste des serveurs
MaxPlayers- Nombre de joueurs (100 par défaut ; le script de démarrage le plafonne avec FIXEDMAXPLAYERS)
ShouldAdvertise- true pour paraître dans la liste des serveurs
MapRotationMode- LayerList_Vote par défaut : vote de la carte suivante ; LayerList suit LayerRotation.cfg dans l'ordre
PublicQueueLimit- Taille de la file d'attente quand le serveur est plein
TKAutoKickEnabled, AutoTKBanNumberTKs- Expulsion automatique des tueurs d'équipiers, et bannissement après N
RCON permet de commander le serveur depuis le terminal : le mot de passe est donné au démarrage (RCONPASSWORD dans start.sh) et le petit client ci-dessous parle le protocole RCON : python3 /opt/squad/rcon.py <mot de passe> <commande>.
cat > /opt/squad/rcon.py << 'EOF'
import socket, struct, sys
mdp = sys.argv[1]
cmd = " ".join(sys.argv[2:])
def paquet(i, t, corps):
b = struct.pack("<ii", i, t) + corps.encode() + b"\x00\x00"
return struct.pack("<i", len(b)) + b
s = socket.create_connection(("127.0.0.1", 21114), timeout=10)
s.sendall(paquet(1, 3, mdp))
rep = s.recv(4096)
if len(rep) < 12 or struct.unpack("<i", rep[4:8])[0] == -1:
print("Mot de passe RCON refuse")
sys.exit(1)
s.sendall(paquet(2, 2, cmd))
s.settimeout(3)
data = b""
try:
while True:
d = s.recv(65536)
if not d:
break
data += d
except socket.timeout:
pass
s.close()
print(data[12:].decode("utf-8", "replace").replace("\x00", "").strip())
EOF
chown squad:squad /opt/squad/rcon.py5Créer le script de démarrage et le service
Le script lance le serveur avec le port du jeu (7787), le port d'interrogation (27165), le port et le mot de passe RCON (21114, changez le mot de passe), le plafond de joueurs et la cadence (50 ticks). Le service le lance avec l'utilisateur squad, le démarre avec la machine et le relance s'il plante. Le premier démarrage charge une carte : comptez deux minutes.
cat > /opt/squad/start.sh << 'EOF'
#!/bin/sh
cd /opt/squad/server
exec ./SquadGameServer.sh Port=7787 QueryPort=27165 RCONPORT=21114 RCONPASSWORD=ChangezMoiAussi FIXEDMAXPLAYERS=40 FIXEDMAXTICKRATE=50 RANDOM=NONE -log
EOF
chmod +x /opt/squad/start.sh && chown -R squad:squad /opt/squadcat > /etc/systemd/system/squad.service << 'EOF'
[Unit]
Description=Serveur Squad
After=network.target
[Service]
User=squad
Group=squad
WorkingDirectory=/opt/squad/server
ExecStart=/opt/squad/start.sh
LimitNOFILE=100000
TimeoutStopSec=60
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload && systemctl enable --now squadCreated symlink /etc/systemd/system/multi-user.target.wants/squad.service → /etc/systemd/system/squad.service.
systemctl is-active squad && grep -h 'Bringing World\|Session created' /opt/squad/server/SquadGame/Saved/Logs/SquadGame.log | cut -c1-120 && ss -lunp | grep Squad | awk '{print $4}' | sort && ss -ltnp | grep ':21114 ' | awk '{print $4}'active [2026.09.21-23.58.13:063][ 0]LogWorld: Bringing World /Al_Basrah/Maps/Gameplay_Layers/AlBasrah_AAS_v1.AlBasrah_AAS_v1 u [2026.09.21-23.58.15:671][ 28]LogSquadOnlineServices: Session created: Started USQOnlineServicesUpdateSessionManager upd 0.0.0.0:15000 0.0.0.0:27165 0.0.0.0:7787 0.0.0.0:21114
python3 /opt/squad/rcon.py ChangezMoiAussi ShowCurrentMap && python3 /opt/squad/rcon.py ChangezMoiAussi ListPlayersCurrent level is Al Basrah, layer is AlBasrah_AAS_v1, factions USMC MEI ----- Active Players ----- ----- Recently Disconnected Players [Max of 15] -----
6Gérer le serveur : RCON, journal, arrêt
python3 /opt/squad/rcon.py ChangezMoiAussi ShowCurrentMappython3 /opt/squad/rcon.py ChangezMoiAussi ListPlayerspython3 /opt/squad/rcon.py ChangezMoiAussi AdminBroadcast Redémarrage dans 5 minutespython3 /opt/squad/rcon.py ChangezMoiAussi AdminChangeLayer Yehorivka_AAS_v1python3 /opt/squad/rcon.py ChangezMoiAussi AdminKick IDENTIFIANT motiftail -f /opt/squad/server/SquadGame/Saved/Logs/SquadGame.logLe journal est très bavard : des lignes « LogStreaming: Error: CreateExport » ou « LogSquad: Error: Failed to spawn EquipableItem » défilent au chargement d'une carte sans empêcher le serveur de tourner.
systemctl status squadsystemctl restart squadsystemctl stop squad7Ouvrir les ports dans le pare-feu
Les joueurs se connectent en UDP sur le port 7787 ; le port 27165 en UDP sert à la liste des serveurs. Le port RCON 21114 reste fermé : rcon.py l'utilise depuis le serveur. La commande active le pare-feu du système en gardant SSH autorisé, puis ouvre les ports.
apt install -y ufw && ufw allow 22/tcp && ufw allow 7787/udp && ufw allow 27165/udp && ufw --force enable... Firewall is active and enabled on system startup
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=7787/udp --add-port=27165/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=7787/udp --add-port=27165/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=7787/udp --add-port=27165/udp && firewall-cmd --reloadsuccess success
ufw statusStatus: active 22/tcp ALLOW Anywhere 7787/udp ALLOW Anywhere 27165/udp ALLOW Anywhere
firewall-cmd --list-ports7787/udp 27165/udp
firewall-cmd --list-ports7787/udp 27165/udp
firewall-cmd --list-ports7787/udp 27165/udp
8Se connecter au serveur
- Lancez Squad, ouvrez la liste des serveurs et cherchez le nom donné à ServerName (Mon serveur Squad).
- Les administrateurs déclarés dans Admins.cfg ont leurs commandes dans la console du jeu.
9Mettre à jour le serveur
Après une mise à jour du jeu, mettez le serveur à jour : la même commande que l'installation, serveur arrêté.
systemctl stop squad && su - squad -c "/opt/squad/steamcmd/steamcmd.sh +force_install_dir /opt/squad/server +login anonymous +app_update 403240 +quit" && systemctl start squad... Success! App '403240' already up to date. (« fully installed » quand une mise à jour a été téléchargée)
Erreurs fréquentes
Un raté passager côté Steam : relancez la même commande, le téléchargement reprend.
Le système n'a pas été mis à jour avant : faites la première boîte de l'étape 1, puis réessayez.
Les programmes 32 bits sont désactivés dans le noyau : appliquez la dernière boîte de l'étape 1 et redémarrez.
Plusieurs serveurs de jeux tournent sur la même machine, chacun avec son utilisateur, et SteamCMD a déjà créé dix dossiers /tmp/dumps, /tmp/dumps01... /tmp/dumps09 qui appartiennent aux autres : lancez rm -rf /tmp/dumps* en root, puis relancez la commande.
Le mot de passe donné à rcon.py n'est pas celui de RCONPASSWORD dans start.sh, ou le serveur charge encore sa carte (deux minutes). Vérifiez start.sh, attendez, puis relancez la commande.
Messages du chargement de la carte, sans effet : la ligne « Session created » qui suit dit que le serveur est en service.
Vérifiez que ShouldAdvertise vaut true dans Server.cfg, que la ligne « Session created » est dans le journal et que les ports 7787 et 27165 sont ouverts en UDP (étape 7).
Il occupe 4,5 Go de mémoire vive sans joueur : sur 8 Go, arrêtez tout autre service de jeu.
Serveur prêt
Votre serveur Squad démarre avec la machine, se relance s'il tombe et écoute sur le port 7787. Donnez le nom du serveur à vos joueurs.