Privacy notice This website only uses technically necessary cookies. Statistics, marketing and external services are not loaded without JavaScript. Learn more in our Privacy Policy.
Privacy notice This website uses only technically necessary cookies. Statistics, marketing and external services are not loaded without JavaScript. Read more in our Privacy Policy.
Informacja o prywatności Ta strona używa wyłącznie technicznie niezbędnych plików cookie. Statystyka, marketing i usługi zewnętrzne nie są ładowane bez JavaScript. Więcej w naszej Polityce prywatności.
Information sur la confidentialité Ce site n’utilise que des cookies techniquement nécessaires. Les services de statistiques, de marketing et les services externes ne sont pas chargés sans JavaScript. Plus d’informations dans notre Politique de confidentialité.
Avviso sulla privacy Questo sito usa solo cookie tecnicamente necessari. I servizi statistici, di marketing ed esterni non vengono caricati senza JavaScript. Maggiori informazioni nella nostra Informativa sulla privacy.
Aviso de privacidad Este sitio web solo usa cookies técnicamente necesarias. Los servicios de estadística, marketing y externos no se cargan sin JavaScript. Más información en nuestra Política de privacidad.
Privacymelding Deze website gebruikt alleen technisch noodzakelijke cookies. Statistiek-, marketing- en externe diensten worden zonder JavaScript niet geladen. Meer hierover in onze Privacyverklaring.
Privatlivsinformation Denne hjemmeside bruger kun teknisk nødvendige cookies. Statistik-, marketing- og eksterne tjenester indlæses ikke uden JavaScript. Læs mere i vores Privatlivspolitik.

Halloween at Nexthosting: 10% off game servers with the code – until November 1

Back to the blog
Nexthosting Guide

Set Up a SteamCMD Server: systemd, Automation, and Security

Set up a SteamCMD server on Windows or Linux step by step: systemd units, automatic updates, firewall hardening, and a managed hosting option.

Sep 9, 2026 151 views
Set Up a SteamCMD Server: systemd, Automation, and Security

SteamCMD is Valve's official command-line tool for downloading and updating files for dedicated servers. The core command is +force_install_dir <directory> +login anonymous +app_update <APPID> [+validate] +quit. Whether you use Windows or Linux, the logic stays the same; only the installation and a few system requirements differ. The details follow below, step by step.


In short:

  • If you self-host a dedicated game server, you need an unprivileged user and a clear directory structure to avoid errors.
  • When installing SteamCMD on Linux, you must install the 32-bit libraries, otherwise the client won't start.
  • The correct order when downloading the server files is +force_install_dir before +login, to prevent installation errors.
  • For stable operation, servers should run as systemd services so that they restart automatically after failures.
  • When opening network ports, only the port range the game needs should be opened, and RCON access should only be allowed from the internal network.

Nexthosting
Run your Steam server reliably
Nexthosting offers powerful servers with DDoS protection, fast provisioning, and personal support for demanding game server projects.
View hosting solutions

Table of contents

Requirements and preparation for your own Steam server

A few things should be in place before SteamCMD even starts. If you cut corners here, you'll spend hours chasing error messages that were easily avoidable.

  • Create a dedicated, unprivileged user. SteamCMD should never run as root, which is one of the most important basic rules when operating a Steam dedicated server.
  • Set up a clear directory structure, for example /home/steam/serverfiles for the game files and a separate directory for SteamCMD itself.
  • On Linux, install the required 32-bit libraries (for example lib32gcc-s1), since otherwise SteamCMD won't start at all on 64-bit systems.
  • Check the available storage. Some games, such as Rust or Arma 3, quickly take up several dozen gigabytes.
  • Plan a backup schedule from the start instead of setting one up only after your first data loss.

Pro tip: Before the first installation, write down the exact AppID of your server. Many guides confuse the client AppID with the dedicated server AppID, and that later leads to rather confusing error messages.

Installing SteamCMD: step by step on Windows and Linux

The installation itself takes only a few minutes on both systems. SteamCMD downloads its own components on first launch anyway, so a lean base package is enough.

On Windows:

  1. Download the official steamcmd.zip archive from SteamCDN.
  2. Extract the file into a dedicated directory, for example C:\steamcmd.
  3. Start steamcmd.exe. On first launch, the tool downloads all of its own components.
  4. Wait until the Steam> prompt appears. SteamCMD is then ready to use.

On Linux:

  1. Check whether your distribution offers a steamcmd package in its repositories, and install it through the package manager if so.
  2. Alternatively, download the archive manually with wget and extract it with tar -xvzf steamcmd_linux.tar.gz.
  3. Run ./steamcmd.sh from your own user account, never as root.
  4. If startup aborts with a library error, the 32-bit packages from the previous section are almost always missing.

As the standard tool for modern Steam-based servers, SteamCMD has practically completely replaced the older HLDSUpdateTool, because it is built on the SteamPipe infrastructure and delivers updates far more reliably.

Downloading server files with +app_update: practical examples

The order of the commands determines whether the installation runs smoothly or ends in cryptic error messages. Valve explicitly recommends setting +force_install_dir before +login, because the older order is still tolerated but increasingly considered error-prone.

A typical command for a Counter-Strike 2 server looks like this:

  • ./steamcmd.sh +force_install_dir /home/steam/cs2 +login anonymous +app_update 730 +quit

For most dedicated servers, the anonymous login is completely sufficient. A personal Steam account is not needed, which makes automation considerably easier. The most common stumbling block is the error message “No subscription”, which almost always traces back to a wrong AppID or an incorrect login mode. If you want to load Workshop content, for example for Garry’s Mod, also use the +host_workshop_collection parameter with the respective collection ID.

The +validate flag checks all files against checksums and is useful for the initial installation or for troubleshooting. However, it doesn't belong in the standard command for the daily update run, because it can overwrite local customizations and costs unnecessary time.

Pro tip: Always run the first installation with +validate, but after that only when you have a specific problem. For larger servers such as Rust or Arma 3, this noticeably saves time on every update.

Configuring server.cfg, launch parameters, and RCON correctly

After installation comes the actual configuration. It determines how stable and how secure the server will be later on.

At a minimum, the following entries belong in server.cfg:

  • hostname for the public server name
  • rcon_password with a strong, unique password
  • sv_maxplayers to limit the number of players
  • Game-specific entries such as map rotation or tick rate

The launch parameters control the behavior at server startup itself, for example +map de_dust2, -port 27015, or +maxplayers 20. They are passed directly when calling the server executable, not through SteamCMD.

RCON deserves special attention. Restrict access to trusted IP addresses or an internal network, and never use the same password as for other services. Also important: if +validate runs again, it does not overwrite a locally customized server.cfg as long as the file is not part of the official file set. For some games, though, it's still worth backing up the configuration before every major update.

systemd, scripts, and the right update strategy

A server that has to be restarted manually after every crash is not a long-term solution. This is exactly where a systemd unit pays off.

  1. Create a unit file with User=steam, WorkingDirectory pointing to the server directory, and ExecStart pointing to the start executable.
  2. Set Restart=on-failure and After=network-online.target so that the service only starts once a network connection is available.
  3. Increase LimitNOFILE if many simultaneous connections are expected.
  4. Create a separate update script that calls SteamCMD with the appropriate parameters, without +validate in regular operation.
  5. Schedule updates through a systemd timer instead of cron, which gives you better control over dependencies and logging.

This combination of Restart and Limit options significantly improves the reliability of game servers, especially for games with many small network packets.

Pro tip: Test every update on a staging instance first and roll it out during low-traffic hours before it's the production server's turn.

Firewall, ports, and network security for your Steam server

A dedicated server needs open ports, but not all of them indiscriminately. Each game typically uses a game port for the actual connection, a separate query port for server queries, and an RCON port for remote control, usually over UDP for game traffic and TCP for RCON.

  • On your router, open only the ports that are actually needed via port forwarding, not entire port ranges.
  • Allow RCON access only from the internal network or through a VPN, never openly to the internet.
  • Set up Fail2Ban or similar rules to automatically block repeated login attempts.
  • Check the firewall configuration again after every major server update, since some updates change default ports.

The network location also measurably affects latency for your players, which is one reason why DDoS protection and server location matter at least as much as the raw hardware when choosing a hosting provider. A weak connection makes even the best-configured server unusable for European players.

Common SteamCMD errors and how to fix them

Most problems can be solved with a few targeted checks instead of setting up the whole installation again.

  • “No subscription”: This is usually caused by a wrong AppID or an incorrectly set login mode. Check both values first.
  • SteamCMD won't start at all on Linux: In almost all cases the 32-bit libraries are missing; see the requirements further above.
  • Strange installation errors: Check the command order; +force_install_dir must come before +login.
  • File permission errors: Check whether the server process is really running under your own user account, not under root.
  • For unclear errors, the SteamCMD logs in the console directory often help faster than another +validate run.

Self-hosting or managed hosting: an honest assessment

Running your own SteamCMD server is worthwhile if you want control over every detail and have the time for maintenance, updates, and security hardening. If, on the other hand, you don't want to handle support effort, DDoS mitigation, and backups yourself, managed hosting is often the more sensible choice. The technology behind it stays the same; only the responsibility shifts.

— Erik

Nexthosting: when running SteamCMD becomes too much effort

Everything described in this article can be done yourself, but it costs time: configuring ports, securing systemd services, testing updates, maintaining backups. Nexthosting takes most of these tasks off your hands, so you can focus on configuring your server instead of its infrastructure. Instead of maintaining your own systemd unit and adjusting firewall rules by hand, you get a ready-to-use environment in which SteamCMD updates and server management run much faster. That pays off especially if you run several instances in parallel or simply don't feel like dealing with nightly update windows. Take a look at the server plans for CS2 or check out Nexthosting's VPS solutions if you need more flexibility for your own SteamCMD installations.

Sources

Further reading: the Valve Developer Documentation on SteamCMD and a practical tutorial on game server setup.

FAQ

How do I create my own game server with SteamCMD?

You install SteamCMD, set a target directory with +force_install_dir, log in with +login anonymous, and download the server files with +app_update <APPID>. After that comes the configuration via server.cfg and the appropriate launch parameters.

How do I start a server from the command line?

After installation, you start the server through its server executable with the appropriate launch parameters, such as the map name and port number. For permanent operation, also set up a systemd unit that restarts the service automatically.

Do I need a Steam account to set up a server?

No, for most dedicated servers the anonymous login via +login anonymous is completely sufficient. A personal Steam account is not required.

When should I use the validate flag in SteamCMD?

Use +validate for the initial installation or when you want to fix a specific error. Leave it out for regular updates, since it can overwrite local configuration changes.

Why won't SteamCMD start on Linux?

In most cases, the 32-bit libraries such as lib32gcc-s1 are missing. SteamCMD requires them even on 64-bit systems. Installing them afterwards through the package manager usually fixes the problem right away.