Désactiver le préchargeur
Tutoriels Linux Serveurs de jeux

Installer un serveur Squad sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur Squad sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
11 vues
Intermédiaire
40 minutes

Prérequis

Votre serveur :

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).

Mettre à jour le système
apt update && apt upgrade -y
Résultat attendu
...
212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded.
(les nombres dépendent de l'âge de l'image)
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
zypper -n refresh && zypper -n update
Résultat attendu
All repositories have been refreshed.
...
Installer les bibliothèques 32 bits et curl
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curl
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
zypper -n install glibc-32bit libstdc++6-32bit

openSUSE 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).

Activer les programmes 32 bits dans le noyau, puis redémarrer
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
Après le redémarrage : vérifier que l'option est active
grep -o ia32_emulation=1 /proc/cmdline
Résultat attendu
ia32_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.

Créer les dossiers et l'utilisateur squad
mkdir -p /opt/squad/server /opt/squad/steamcmd && useradd -r -s /bin/bash -d /opt/squad squad && chown -R squad:squad /opt/squad
Télécharger SteamCMD (en tant que squad)
su - squad -c "cd /opt/squad/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"
Résultat attendu
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.

Installer le serveur Squad
su - squad -c "/opt/squad/steamcmd/steamcmd.sh +force_install_dir /opt/squad/server +login anonymous +app_update 403240 validate +quit"
Résultat attendu
...
Success! App '403240' fully installed.
Vérifier la taille et qu'aucune bibliothèque ne manque (0 = rien ne manque)
du -sh /opt/squad/server && ldd /opt/squad/server/SquadGame/Binaries/Linux/SquadGameServer | grep -c 'not found'
Résultat attendu
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).

Nom du serveur et nombre de joueurs dans Server.cfg
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.cfg
Résultat attendu
1:ServerName="Mon serveur Squad"
10:MaxPlayers=40
Déclarer un administrateur dans Admins.cfg (remplacez le SteamID64)
printf 'Group=Admin:kick,ban,changemap\nAdmin=76561197960287930:Admin\n' > /opt/squad/server/SquadGame/ServerConfig/Admins.cfg && cat /opt/squad/server/SquadGame/ServerConfig/Admins.cfg
Résultat attendu
Group=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>.

Créer rcon.py
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.py

5Cré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.

Créer start.sh (changez le mot de passe RCON)
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/squad
Créer le service squad
cat > /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
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now squad
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/squad.service → /etc/systemd/system/squad.service.
Deux minutes plus tard : la carte est chargée, la session est créée et les ports écoutent
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}'
Résultat attendu
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
Interroger le serveur par RCON : la carte en cours et les joueurs
python3 /opt/squad/rcon.py ChangezMoiAussi ShowCurrentMap && python3 /opt/squad/rcon.py ChangezMoiAussi ListPlayers
Résultat attendu
Current 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

La carte et les factions en cours
python3 /opt/squad/rcon.py ChangezMoiAussi ShowCurrentMap
Les joueurs connectés (avec leur identifiant)
python3 /opt/squad/rcon.py ChangezMoiAussi ListPlayers
Un message à tous les joueurs (« Message broadcasted <...> »)
python3 /opt/squad/rcon.py ChangezMoiAussi AdminBroadcast Redémarrage dans 5 minutes
Changer de carte (« Change layer to Yehorivka_AAS_v1 » ; le chargement prend une minute)
python3 /opt/squad/rcon.py ChangezMoiAussi AdminChangeLayer Yehorivka_AAS_v1
Expulser un joueur
python3 /opt/squad/rcon.py ChangezMoiAussi AdminKick IDENTIFIANT motif
Suivre le journal du serveur en direct (Ctrl+C pour sortir)
tail -f /opt/squad/server/SquadGame/Saved/Logs/SquadGame.log

Le 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.

Voir l'état du service
systemctl status squad
Redémarrer
systemctl restart squad
Arrêter
systemctl stop squad

7Ouvrir 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.

Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
apt install -y ufw && ufw allow 22/tcp && ufw allow 7787/udp && ufw allow 27165/udp && ufw --force enable
Résultat attendu
...
Firewall is active and enabled on system startup
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=7787/udp --add-port=27165/udp && firewall-cmd --reload
Résultat attendu
...
success
success
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=7787/udp --add-port=27165/udp && firewall-cmd --reload
Résultat attendu
...
success
success
Ouvrir les ports du jeu (firewalld est déjà actif sur openSUSE)
firewall-cmd --permanent --add-port=7787/udp --add-port=27165/udp && firewall-cmd --reload
Résultat attendu
success
success
Vérifier les règles
ufw status
Résultat attendu
Status: active
22/tcp                     ALLOW       Anywhere
7787/udp                   ALLOW       Anywhere
27165/udp                  ALLOW       Anywhere
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7787/udp 27165/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7787/udp 27165/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7787/udp 27165/udp

8Se connecter au serveur

  1. Lancez Squad, ouvrez la liste des serveurs et cherchez le nom donné à ServerName (Mon serveur Squad).
  2. 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é.

Mettre à jour le serveur (serveur arrêté, puis relancé)
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
Résultat attendu
... Success! App '403240' already up to date.
(« fully installed » quand une mise à jour a été téléchargée)

Erreurs fréquentes

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.

💬 Écrivez-nous sur Messenger !