Uso de SteamCMD: instalación, comandos, automatización y errores

Última actualización: 15/10/2025
Autor: Isaac
  • 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.

Guía de uso de SteamCMD y servidores dedicados

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?

Qué es SteamCMD

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.

  League Of Legends No Se Inicia. 10 Posibles Soluciones

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.

  Cómo conseguir vidas en Homescapes: trucos y consejos

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

  1. Crear el fichero: nano updateserver.sh
  2. Pegar el código proporcionado.
  3. Ajustar el contenido y añadir al menos un juego en las líneas DL_SV*=.
  4. Guardar con Ctrl+O, pulsar Enter y salir con Ctrl+X.
  5. Dar permisos de ejecución: chmod u+x ./updateserver.sh
  6. 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:

  1. Abrir Internet Explorer.
  2. Herramientas → Opciones de Internet.
  3. Pestaña Conexiones.
  4. En Configuración de red de área local (LAN), pulsa Configuración.
  5. Marca «Detectar la configuración automáticamente«.
  6. Acepta y aplica. Si persiste, baja el nivel de seguridad a medio o inferior.
  Cómo Encontrar Estructuras En Minecraft Con Comandos

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.