SteamCMD es la versión de línea de comandos del cliente de Steam, pensada para instalar y actualizar servidores dedicados de juegos como Valheim, Counter-Strike 2, Rust o Project Zomboid. En este tutorial instalarás SteamCMD desde los repositorios de Ubuntu 24.04, descargarás un servidor dedicado con un usuario sin privilegios, aprenderás a actualizarlo y a elegir ramas beta, y automatizarás las actualizaciones con un script de SteamCMD y un timer de systemd.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS de 64 bits, por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. - Espacio en disco suficiente para el juego: desde 2 GB (Valheim) hasta más de 30 GB (CS2 o ARK).
- Opcional: una cuenta de Steam, solo para servidores que no permiten la descarga anónima.
Paso 1: Instalar SteamCMD
SteamCMD es un binario de 32 bits y en Ubuntu se publica en el componente multiverse. Actívalo, añade la arquitectura i386 e instala el paquete:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd
El instalador muestra el acuerdo de licencia de Steam; selecciona Aceptar. El comando queda en /usr/games/steamcmd:
command -v steamcmd
/usr/games/steamcmd
Notaen Debian 12 el paquete está en el componente
non-freeen lugar demultiverse. En distribuciones sin paquete puedes descargar el archivo oficialsteamcmd_linux.tar.gzde Valve en el directorio del usuario y ejecutarsteamcmd.sh; los comandos del resto de la guía son los mismos.
Paso 2: Crear un usuario para los servidores
Ejecuta SteamCMD y los servidores con un usuario dedicado, nunca como root. Así un fallo en un servidor de juego no compromete el sistema:
sudo useradd --create-home --shell /bin/bash steam
La primera ejecución descarga la última versión de SteamCMD en el directorio del usuario. Lánzalo una vez y sal:
sudo -u steam /usr/games/steamcmd +quit
[ 0%] Checking for available updates...
[----] Downloading update (...)
...
Loading Steam API...OK
Paso 3: Encontrar el app ID del servidor
Cada servidor dedicado tiene un app ID propio, que a menudo no coincide con el del juego. Algunos de los más habituales, todos descargables con sesión anónima:
| Servidor dedicado | App ID |
|---|---|
| Counter-Strike 2 | 730 |
| Team Fortress 2 | 232250 |
| Valheim | 896660 |
| Rust | 258550 |
| Project Zomboid | 380870 |
| 7 Days to Die | 294420 |
| ARK: Survival Evolved | 376030 |
| Palworld | 2394010 |
Para cualquier otro juego, busca "<nombre> Dedicated Server" en SteamDB y usa el app ID de tipo Tool que aparece allí, o consulta la documentación del propio juego.
Paso 4: Descargar un servidor dedicado
La orden básica tiene tres partes: el directorio de instalación, el inicio de sesión y la descarga. +force_install_dir debe ir antes de +login, y cada juego debe tener su propio directorio. Por ejemplo, para el servidor de Valheim:
sudo -u steam /usr/games/steamcmd \
+force_install_dir /home/steam/servers/valheim \
+login anonymous \
+app_update 896660 validate \
+quit
validate comprueba todos los archivos contra los de Steam y repara los que falten o estén dañados. Al terminar verás:
Success! App '896660' fully installed.
Comprueba que el servidor está en disco:
sudo -u steam ls /home/steam/servers/valheim
start_server.sh valheim_server.x86_64 valheim_server_Data steamapps ...
Cómo se arranca y configura cada servidor depende del juego; consulta su documentación o la guía específica de ese juego.
Servidores que requieren una cuenta de Steam
Si la descarga anónima falla con ERROR! Failed to install app 'XXXX' (No subscription), el servidor exige una cuenta que tenga el juego. Crea una cuenta de Steam dedicada solo para esto e inicia sesión de forma interactiva la primera vez, para introducir la contraseña y el código de Steam Guard:
sudo -u steam /usr/games/steamcmd +login your_steam_user +quit
SteamCMD guarda la sesión en el directorio personal del usuario steam, de modo que las siguientes ejecuciones con +login your_steam_user ya no piden contraseña. No escribas la contraseña en scripts ni en crontab.
Paso 5: Actualizar servidores y usar ramas beta
Para actualizar un servidor basta con repetir app_update sobre el mismo directorio: solo se descargan los archivos que han cambiado. Detén siempre el servidor antes, porque sus binarios están en uso:
sudo -u steam /usr/games/steamcmd \
+force_install_dir /home/steam/servers/valheim \
+login anonymous \
+app_update 896660 \
+quit
Para ver la versión instalada (el build ID) y el estado del servidor, usa app_status:
sudo -u steam /usr/games/steamcmd \
+force_install_dir /home/steam/servers/valheim \
+login anonymous \
+app_status 896660 \
+quit
AppID 896660 (Valheim Dedicated Server):
- release state: Fully Installed,
- install dir: "/home/steam/servers/valheim"
- size on disk: 1843204521 bytes, BuildID 19123456
Muchos juegos publican versiones de prueba en ramas beta. Para cambiar de rama, añade -beta con su nombre (y -betapassword si la rama es privada). Para volver a la versión estable, usa -beta public:
sudo -u steam /usr/games/steamcmd \
+force_install_dir /home/steam/servers/valheim \
+login anonymous \
+app_update 896660 -beta public_test validate \
+quit
El nombre de la rama (public_test en el ejemplo) lo publica cada juego. Los clientes deben estar en la misma rama que el servidor.
Paso 6: Automatizar las actualizaciones
Cuando mantienes varios servidores, en lugar de repetir argumentos largos conviene un script de SteamCMD que se carga con +runscript. Crea uno por servidor:
sudo -u steam mkdir -p /home/steam/scripts
sudo -u steam nano /home/steam/scripts/valheim.txt
force_install_dir /home/steam/servers/valheim
login anonymous
app_update 896660
quit
Pruébalo:
sudo -u steam /usr/games/steamcmd +runscript /home/steam/scripts/valheim.txt
Ahora crea un servicio systemd de tipo oneshot que pare el servidor, actualice y lo vuelva a arrancar. En este ejemplo el servidor se ejecuta como valheim.service; ajusta el nombre al tuyo:
sudo nano /etc/systemd/system/valheim-update.service
[Unit]
Description=Update Valheim dedicated server with SteamCMD
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=steam
Group=steam
ExecStartPre=+/usr/bin/systemctl stop valheim.service
ExecStart=/usr/games/steamcmd +runscript /home/steam/scripts/valheim.txt
ExecStopPost=+/usr/bin/systemctl start valheim.service
TimeoutStartSec=1h
SteamCMD se ejecuta como steam, mientras que el prefijo + hace que las órdenes de parada y arranque se ejecuten como root. ExecStopPost vuelve a arrancar el servidor incluso si la actualización falla, para que no quede parado.
Y un timer que lo lance cada día a las 05:00:
sudo nano /etc/systemd/system/valheim-update.timer
[Unit]
Description=Daily Valheim server update
[Timer]
OnCalendar=*-*-* 05:00:00
Persistent=true
[Install]
WantedBy=timers.target
Activa el timer y ejecuta el servicio una vez a mano para probarlo:
sudo systemctl daemon-reload
sudo systemctl enable --now valheim-update.timer
sudo systemctl start valheim-update.service
sudo journalctl -u valheim-update.service -n 20
Comprueba la próxima ejecución programada:
systemctl list-timers valheim-update.timer
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2026-09-26 05:00:00 UTC 13h left - - valheim-update.timer valheim-update.service
Consejohaz una copia de seguridad de las partidas antes de actualizar. Puedes añadir otra línea
ExecStartPre=con tu script de copia, justo después de parar el servidor.
Paso 7: Descargar contenido del Workshop
Algunos servidores necesitan que descargues los mods del Steam Workshop con SteamCMD. El comando es workshop_download_item, con el app ID del juego (no del servidor) y el ID del ítem, que es el número de la URL de su página:
sudo -u steam /usr/games/steamcmd \
+force_install_dir /home/steam/servers/juego \
+login anonymous \
+workshop_download_item 107410 123456789 \
+quit
Success. Downloaded item 123456789 to "/home/steam/servers/juego/steamapps/workshop/content/107410/123456789" (...)
El ejemplo usa el app ID de Arma 3 (107410) y un ítem ficticio. Muchos juegos solo permiten descargar su Workshop con una cuenta que posea el juego; si la sesión anónima falla, usa +login your_steam_user. Después copia o enlaza el contenido donde lo espere el servidor, según la documentación del juego. Otros juegos, como Project Zomboid, descargan los mods por sí mismos al arrancar.
Solución de problemas
ERROR! Failed to install app 'XXXX' (No subscription): el servidor no admite descarga anónima o el app ID es el del juego y no el del servidor dedicado. Revisa el app ID o inicia sesión con una cuenta que tenga el juego.ERROR! Failed to install app 'XXXX' (Disk write failure): el usuariosteamno puede escribir en el directorio o no hay espacio. Comprueba condf -hyls -ldque el directorio pertenece asteam.Please use force_install_dir before logon!: el orden de los argumentos es incorrecto. Pon+force_install_dirantes de+login.- La descarga se interrumpe o da un error de tiempo de espera: vuelve a lanzar el mismo comando; SteamCMD continúa donde se quedó. Si persiste, añade
validate. steamcmd: command not found: usa la ruta completa/usr/games/steamcmd; algunos entornos (cron, sudo consecure_path) no incluyen/usr/gamesenPATH.
Conclusión
Has instalado SteamCMD en Ubuntu 24.04, descargado un servidor dedicado con un usuario sin privilegios, aprendido a actualizarlo y cambiar de rama, y automatizado las actualizaciones con un script de SteamCMD y un timer de systemd. Como siguientes pasos puedes montar un servidor concreto, como Project Zomboid o Valheim, gestionar varios servidores con LinuxGSM o administrarlos desde un panel web como Pterodactyl.
