- SteamCMD gestiona la instalación y actualización de servidores dedicados con SteamPipe y sustituye al antiguo HLDSUpdateTool.
- Permite autenticación anónima o con cuenta, admite ramas beta y validación de archivos para asegurar la integridad.
- Soporta automatización por CLI y scripts, además de descargas cruzadas con @sSteamCmdForcePlatformType.
- Incluye soluciones a errores habituales (libs 32-bit, login, ulimit) y utilidades como LGSM y SteamCMD GUI.
Si quieres montar o mantener servidores dedicados de juegos con la infraestructura de Valve, tarde o temprano te toparás con SteamCMD. Esta utilidad es la versión en línea de comandos del cliente de Steam y se ha convertido en la herramienta estándar para descargar, instalar y actualizar servidores. Desde que SteamPipe sustituyó al antiguo HLDSUpdateTool, prácticamente todos los títulos que soportan servidores dedicados pasan por aquí.
En esta guía completa te explico, con todo lujo de detalles, cómo descargar SteamCMD en Windows, Linux y macOS, cómo ejecutar comandos básicos y avanzados, iniciar sesión (de forma anónima o con cuenta), instalar y validar servidores, automatizar tareas con scripts, forzar descargas cruzadas de plataforma, y cómo resolver los errores más habituales. Además, integro un caso práctico con Palworld y repaso utilidades externas y scripts que te facilitan la vida.
¿Qué es SteamCMD y para qué sirve?
SteamCMD es la consola del cliente de Steam: una aplicación sin interfaz gráfica que entiende órdenes de texto. Su función principal es instalar y actualizar aplicaciones y servidores dedicados que usan el sistema de distribución de contenidos SteamPipe. Todos los juegos que antes usaban HLDSUpdateTool migraron a SteamCMD, así que es la vía oficial y soportada por Valve para gestionar servidores.
Descarga e instalación de SteamCMD
El proceso varía según el sistema operativo, pero siempre es sencillo. Crea primero un directorio específico para SteamCMD y trabaja desde ahí para tenerlo todo ordenado.
Windows
En Windows basta con preparar una carpeta, descargar el ZIP oficial y extraerlo. Un ejemplo de ruta cómoda es C:\\steamcmd.
1) Crea la carpeta, por ejemplo: C:\steamcmd
2) Descarga: http://media.steampowered.com/installer/steamcmd.zip
3) Extrae el ZIP dentro de C:\steamcmd
Linux
En Linux conviene instalar primero las bibliotecas de 32 bits, ya que SteamCMD es binario de 32 bits. Los paquetes concretos dependen de la distribución.
Ubuntu/Debian 64-bit:
apt-get install lib32gcc1
RedHat/CentOS:
yum install glibc libstdc++
RedHat/CentOS 64-bit:
yum install glibc.i686 libstdc++.i686
Es muy recomendable crear un usuario dedicado (por ejemplo, «steam») para instalar y ejecutar los servidores. No lances SteamCMD como root; es innecesario y puede provocar problemas de permisos.
# Como root, crea un usuario y su home (o usa sudo)
useradd -m steam
su - steam
# Crea el directorio de trabajo y entra en él
mkdir ~/steamcmd
cd ~/steamcmd
# Descarga y extrae SteamCMD
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
macOS (OS X)
En macOS el flujo es similar: carpeta, descarga y extracción desde Terminal. Usa curl para traer el instalador.
mkdir ~/steamcmd
cd ~/steamcmd
curl -O http://media.steampowered.com/client/installer/steamcmd_osx.tar.gz
tar -xvzf steamcmd_osx.tar.gz
Cómo ejecutar SteamCMD
Al primer arranque la herramienta se autoactualiza y te deja en el prompt Steam>. Escribe help para ver los comandos disponibles y empezar a orientarte.
Windows
Desde la consola de Windows, navega a la carpeta donde lo descomprimiste y ejecútalo. Los comandos básicos son directos:
cd C:\steamcmd
steamcmd
Linux y macOS
En sistemas tipo Unix, entra en el directorio de trabajo y lanza el script. Recuerda usar ./ delante del ejecutable:
cd ~/steamcmd
./steamcmd.sh
Inicio de sesión en SteamCMD
SteamCMD permite iniciar sesión de dos maneras: anónima o con credenciales de Steam. Muchas apps de servidor se descargan en modo anónimo, pero no todas.
Acceso anónimo
Para los servidores que lo permiten, lo más rápido es: login anonymous.
login anonymous
Acceso con tu cuenta de Steam
Algunos servidores requieren autenticación y, en ocasiones, haber adquirido el juego. En esos casos, inicia sesión con tu usuario. Por seguridad, se aconseja crear una cuenta secundaria solo para servidores y evitar usar la cuenta personal con juegos.
login <tu_usuario>
Introduce la contraseña cuando la pida. Si tienes Steam Guard, recibirás un código por correo y tendrás que introducirlo la primera vez (o si borras los archivos donde SteamCMD guarda los datos de login). Ten en cuenta que una cuenta solo puede estar conectada en un lugar a la vez, ya sea en el cliente gráfico o en SteamCMD.
Instalar y actualizar servidores con SteamCMD
El flujo tipo es: iniciar sesión, elegir carpeta de instalación y usar app_update con el App ID. También puedes validar archivos y escoger ramas beta si están disponibles.
Primero, define el directorio de destino (barra normal en Linux/macOS y contrabarra en Windows): force_install_dir <ruta>
# Ejemplo: subcarpeta "cs_go" en el directorio actual
force_install_dir ./cs_go/
Después, ejecuta la instalación o actualización con app_update. Puedes añadir validate para comprobar la integridad, y -beta con -betapassword si necesitas una rama protegida. La sintaxis general es esta:
app_update <app_id> [-beta <rama_beta>] [-betapassword <clave>] [validate]
HLDS es un caso especial: su App ID es siempre 90 y hay que seleccionar el mod con app_set_config antes de actualizar. El parámetro a fijar es mod:
app_set_config <app_id> <opcion> <valor>
Algunos ejemplos prácticos muy usados. CS:GO dedicado:
app_update 740 validate
HLDS con Team Fortress Classic:
app_set_config 90 mod tfc
app_update 90 validate
Ten presente que HLDS (appid 90) puede requerir ejecutar app_update varias veces hasta que baje todos los archivos necesarios. Repite app_update 90 validate hasta que ya no queden actualizaciones.
HLDS (Half-Life) en beta:
app_update 90 -beta beta validate
Counter-Strike: Source dedicado (rama prerelease):
app_update 232330 -beta prerelease validate
Natural Selection 2 dedicado en beta privada (rama «alpha», clave «natsel»):
app_update 4940 -beta alpha -betapassword natsel validate
Cuando termines, cierra sesión correctamente con: quit.
quit
Validación de archivos
El modificador validate fuerza a comprobar que todos los ficheros coinciden con los oficiales. Es útil si sospechas que hay archivos corruptos o faltantes tras un fallo.
Ojo: validar sobrescribe los archivos modificados respecto al estado por defecto. Si personalizaste, por ejemplo, mapcycle.txt, se restaurará la versión original. Ficheros que no forman parte de la instalación por defecto no se tocan.
Automatizar SteamCMD
Puedes automatizar tareas tanto concatenando órdenes en la línea de comandos como a través de scripts con +runscript. En Linux y macOS sustituye steamcmd por ./steamcmd.sh en los ejemplos.
Desde la línea de comandos
Para encadenar múltiples acciones, antepón + a cada instrucción. Con las ramas beta en la CLI hay una particularidad: deben ir entrecomilladas de forma especial si se pasan dentro de app_update.
Ejemplo para CS:GO dedicado con ruta de instalación personalizada: con login anónimo
steamcmd +login anonymous +force_install_dir ../csgo_ds +app_update 740 +quit
Para instalar un mod de HL1 como Condition Zero, recuerda fijar el mod antes: usa app_set_config 90 mod czero
steamcmd +login anonymous +force_install_dir ../czero +app_set_config 90 mod czero +app_update 90 +quit
Si el juego requiere login, pasa usuario y contraseña en la orden: ejemplo con Killing Floor
steamcmd +login <usuario> <contraseña> +force_install_dir c:\KFServer\ +app_update 215350 +quit
Sobre las ramas beta en la CLI, prueba formatos como: +app_update «90 -beta beta» o bien «+app_update 90 -beta beta» si el primero no funciona.
Con un script
Coloca tus comandos de SteamCMD en un archivo de texto y ejecútalos con +runscript. Puedes añadir comentarios con // en el propio script.
steamcmd +runscript csgo_ds.txt
Descarga cruzada de plataformas
SteamCMD permite forzar la plataforma de destino con la variable @sSteamCmdForcePlatformType. Valores soportados: windows, macos y linux. Sí, la variable empieza con dos letras s: @sSteamCmd…
# Ejemplo: descargar el servidor dedicado de CS:GO para Windows desde Linux
./steamcmd.sh +@sSteamCmdForcePlatformType windows +login anonymous +force_install_dir ../csgo_ds +app_update 740 validate +quit
Software y utilidades para Windows
Existen herramientas que hacen de puente o interfaz sobre SteamCMD. Algunas de las más usadas en Windows son:
- condenser: bootstrapper para instalar, configurar y lanzar servidores dedicados de Steam.
- SteamCMD GUI: interfaz gráfica para usar SteamCMD sin bat ni comandos. Repositorio: https://github.com/DioJoestar/SteamCMD-GUI
- SteamCMD Guardian 1.2: utilidades y scripts; descarga en: http://pastebin.com/BRUbsGQh
Scripts útiles para Linux
Si trabajas en Linux, hay proyectos que automatizan la gestión de servidores. Destaca Linux Game Server Managers (LGSM), un conjunto de scripts CLI para desplegar y administrar servidores de forma rápida.
Entre sus funciones: instalador con SteamCMD, arranque/parada/reinicio, actualización, monitor con alertas por correo, copias de seguridad y consola del servidor.
LGSM soporta gran variedad de juegos, como ARMA 3, Blade Symphony, Counter-Strike (varias ediciones), Day of Defeat, Fistful of Frags, Garry’s Mod, Half-Life DM Classic, HL2 DM, Insurgency, Just Cause 2, Killing Floor, Left 4 Dead (1 y 2), No More Room in Hell, Natural Selection 2, Red Orchestra: Ostfront 41-45, Team Fortress (varias ediciones), entre otros.
Más información y lista completa: http://danielgibbs.co.uk/lgsm — repositorio en GitHub: https://github.com/dgibbs64/linuxgameservers
También existe un script llamado SteamCMD Guardian 1.2, probado en Debian Wheezy. Puedes verlo y descargarlo en: http://pastebin.com/hcpMpmaZ
Instalación tipo (sesión bajo un usuario dedicado, por ejemplo steam): crea el archivo y edítalo
- Crear el fichero:
nano updateserver.sh
- Pegar el código proporcionado.
- Ajustar el contenido y añadir al menos un juego en las líneas DL_SV*=.
- Guardar con Ctrl+O, pulsar Enter y salir con Ctrl+X.
- Dar permisos de ejecución:
chmod u+x ./updateserver.sh
- Ejecutar:
./updateserver.sh
Este script descargará SteamCMD si no está, lo actualizará e instalará los servidores elegidos (hasta 4 a la vez). Al relanzarlo, actualiza los juegos ya instalados automáticamente.
Errores habituales y cómo solucionarlos
Como en toda herramienta, hay incidencias típicas que conviene tener fichadas. Estas son las más comunes y sus soluciones.
ERROR! Failed to install app ‘xxxxxx’ (No subscription)
Este mensaje indica que el servidor que intentas descargar exige inicio de sesión o que tengas el juego comprado. Prueba a iniciar sesión con una cuenta de Steam y, si no basta, adquiere el título. Por seguridad, crea una cuenta específica para servidores dedicados y evita usar la personal.
Bibliotecas de 32 bits en Linux de 64 bits
Al ser SteamCMD de 32 bits, requiere libs equivalentes. El error típico es: libstdc++.so.6: cannot open shared object file. Instala los paquetes correctos según tu distro.
Debian/Ubuntu (y derivadas):
apt-get install lib32gcc1
# Nota: no hace falta ia32-libs; lib32gcc1 basta.
# En Debian 7 "Wheezy" puedes toparte con dependencias no satisfechas para ia32-libs.
Red Hat/Fedora/CentOS:
yum install glibc.i686 libstdc++.i686
Arch Linux (activa multilib primero):
pacman -S lib32-gcc-libs
Login Failure: No Connection
En Linux, algunos servidores necesitan reglas iptables adecuadas para que el login funcione. Consulta los puertos en: https://support.steampowered.com/kb_article.php?ref=8571-GLVN-8711&l=english y añade las reglas necesarias.
En Windows, si ves errores tipo «SteamUpdater: Error: Download failed: http error 0» o «Steam needs to be online to update», suele arreglarse activando la detección automática en Internet Explorer (Opciones de Internet > Conexiones > Configuración LAN). Pasos:
- Abrir Internet Explorer.
- Herramientas → Opciones de Internet.
- Pestaña Conexiones.
- En Configuración de red de área local (LAN), pulsa Configuración.
- Marca «Detectar la configuración automáticamente«.
- Acepta y aplica. Si persiste, baja el nivel de seguridad a medio o inferior.
Errores de arranque de SteamCMD
En Linux puede aparecer: [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam, or a local steamclient.dll. Solución: enlaza steamclient.so a ~/.steam/sdk32/steamclient.so.
ln -s steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
Algunos scripts muestran error con ulimit al iniciar (no permission/cannot open file), causado por un límite bajo de descriptores de archivo (-n). Súbelo a un valor razonable:
ulimit -n 2048
# Comprueba con: ulimit -a (busca: open files (-n) 1024)
Si no tienes permisos, inicia sesión como root para cambiarlo o edita /etc/security/limits.conf. En muchos casos solo verás una advertencia y SteamCMD seguirá funcionando.
Solo se descarga el motor de HLDS
Al intentar bajar un mod de HL1 (como TFC), es normal que al principio aparezcan solo los ficheros del motor. Insiste ejecutando varias veces app_update hasta que baje todo. Existe un apaño documentado aquí: http://danielgibbs.co.uk/2013/11/hlds-steamcmd-workaround-appid-90/
Otra opción es borrar los appmanifest y dejar que SteamCMD los regenere. Al principio verás un error, pero suele normalizarse. Ten en cuenta que CS a veces se instala también aunque no lo pidas.
Caso práctico: servidor dedicado de Palworld en Windows
En una máquina Windows, puedes desplegar el servidor de Palworld con SteamCMD de forma bastante directa. Funciona iniciando sesión anónima y usando el App ID adecuado.
Instalación base: ejecuta SteamCMD.exe (si quieres, deja el directorio por defecto para simplificar; instalará en steamapps del propio SteamCMD) y pega esta orden: descargará y validará PalServer
login anonymous +app_update 2394010 validate +quit
Los archivos quedarán en: …/SteamCMD/steamapps/common/PalServer. Ahí tienes PalServer.exe; puedes iniciarlo tal cual, pero sin configurar no te podrás unir. Arráncalo una vez para que genere la configuración y ciérralo.
Ve a Pal > Saved > Config > WindowsServer y abre PalWorldSettings.ini. Si no existe, créalo tras ejecutar el servidor una vez. Pega la siguiente línea en una sola línea (sin saltos ni espacios extra) y reemplaza los valores marcados por los tuyos:
[/Script/Pal.PalGameWorldSettings]OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=1.000000,PalCaptureRate=1.000000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,PlayerStomachDecreaceRate=1.000000,PlayerStaminaDecreaceRate=1.000000,PlayerAutoHPRegeneRate=1.000000,PlayerAutoHpRegeneRateInSleep=1.000000,PalStomachDecreaceRate=1.000000,PalStaminaDecreaceRate=1.000000,PalAutoHPRegeneRate=1.000000,PalAutoHpRegeneRateInSleep=1.000000,BuildObjectDamageRate=1.000000,BuildObjectDeteriorationDamageRate=1.000000,CollectionDropRate=1.000000,CollectionObjectHpRate=1.000000,CollectionObjectRespawnSpeedRate=1.000000,EnemyDropItemRate=1.000000,DeathPenalty=All,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=15,DropItemAliveMaxHours=1.000000,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72.000000,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=72.000000,WorkSpeedRate=1.000000,bIsMultiplay=False,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=False,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=4,ServerPlayerMaxNum=32,ServerName="xxxx",ServerDescription="",AdminPassword="",ServerPassword="",PublicPort=8211,PublicIP="xx.xxx.xxx.xxx",RCONEnabled=False,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt")
Personaliza: ServerName (nombre visible), PublicIP (tu IPv4 pública: búscala en Google con «cuál es mi IP») y contraseñas si quieres. Mantén el puerto 8211 salvo que tengas un motivo para cambiarlo. Abre y redirige en tu router los puertos 8211 y 27015.
Si tu router pide un host interno, usa tu IP privada (ipconfig en CMD, toma IPv4). Asegúrate de guardar el INI con el servidor parado. Inicia PalServer.exe y conéctate usando tu IP pública con puerto en el cliente: formato xxx.xxx.xxx.xxx:8211.
Este procedimiento ha funcionado para quien lo compartió y debería ser válido para otros entornos. Recuerda revisar firewall del sistema y del router si no consigues que sea visible desde fuera.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.