--profile infra), which reports to Infra Vulnerabilities and skips the developer-workstation collectors (IDEs, browser extensions, AI tools, credentials).
The console generates the exact command for your organization at Integrations → Overview → Server & Infrastructure. The commands below are the same.
Before you start
- An organization API key (
tg_…) from Settings → Organization → API Keys. The installer uses it once to enrol the server; it is never written to disk. - Outbound HTTPS (443) from the server to
releases.tigergate.devand your region’s API host. - Your region code. Pass
--regionunless your organization is inus1.
Install
- Linux
- Windows
- macOS
Run as a normal user, not as root; the installer refuses root. With The schedule is a systemd user timer, or a cron entry where
sudo the binary goes to /usr/local/bin, without it to ~/.local/bin. The agent itself always runs as this account.systemd --user is not available. The last line keeps the timer running after this account logs out. Without it, a server nobody stays logged in to stops scanning. The agent does not enable linger itself because that needs root.Installer options
| Linux / macOS | Windows | Purpose |
|---|---|---|
--api-key | -ApiKey | Organization key, used once to enrol. Or set TIGERGATE_API_KEY. |
--region | -Region | us1, eu1 or in. Default us1. |
--api-url | -ApiUrl | A staging or self-hosted backend URL. Wins over the region. |
--profile infra | -AgentProfile infra | The server profile. Required on servers. |
--app-path <dir> | -AppPath <dir> | Another directory to search for deployed applications. Repeatable. |
--runtime-home <kind>=<path> | -RuntimeHome <kind>=<path> | A runtime installed where the defaults and discovery do not reach. Repeatable. |
--version <x.y.z> | -Version <x.y.z> | Pin a release. Default: the latest release. |
--interval <duration> | -Interval <duration> | How often the agent wakes to ask whether a scan is due. Default 15m, allowed 15m to 168h. This is not the scan interval. |
--no-schedule | -NoSchedule | Install and enrol without a schedule, for example when your MDM runs the agent. |
--privileged | -Privileged | Run the scheduled scan as root or SYSTEM. The installer then needs sudo or an elevated prompt. See Privileged mode. |
--update | -Update | Update an agent that is already installed: no key and no other option, the stored settings are kept. See Update an existing agent. |
--app-path and --runtime-home apply only to the server profile. Both are remembered, so scheduled scans use them; running the installer again without them keeps the stored values.
Application directories and runtime locations
You usually do not need either option. The agent searches the whole local disk outside the operating system’s own directories, so a JDK unpacked into/u01 is found even when nothing is running from it. It also follows what the server runs: running processes, systemd units, Windows services and launchd daemons, including Java -jar, -cp and -Dcatalina.home arguments and variables such as JAVA_HOME and CATALINA_HOME. See What the agent collects.
Add an option when software is somewhere the agent does not search, such as an NFS share or inside /usr or /var/lib, or when a directory must be searched first:
java, tomcat, node, python, php, nginx, httpd, postgresql, mariadb, mysql, redis, openssl, wildfly, dotnet, weblogic, oracle-db, websphere, liberty, jboss, and app (a directory to search, the same as --app-path). A named runtime is identified even when the files a directory search relies on are missing, for example a JDK 8 without a release file, or a Node.js install without headers.
The application server and database kinds name the install root:
| Kind | Path |
|---|---|
weblogic | The Oracle Home that holds wlserver, or wlserver itself (MW_HOME, ORACLE_HOME) |
oracle-db | An Oracle Database server’s ORACLE_HOME |
websphere | The WebSphere Application Server traditional install root (WAS_HOME) |
liberty | The Liberty install root, the directory with bin/server (WLP_INSTALL_DIR) |
jboss | A Red Hat JBoss EAP install (JBOSS_HOME). wildfly reads the same layout. |
inventory directory. It does not connect to a database. If it cannot read the patch level, the server is reported as patch level unknown and is not assessed; see Application servers and databases.
To change the options later without reinstalling, run configure as the same account:
Which account the agent runs as
By default the schedule runs the agent as the account that installed it, never as root or SYSTEM. On Linux this matters for two things:- Files only root can read are not read:
/etc/shadow,/etc/sudoers, and on some distributions the GRUB configuration. The hardening checks that need them report Not assessed, never Pass. - Directories the account cannot open, such as
/rootor another user’s home, are skipped and counted in the server’s coverage details. They do not stop findings from closing.
Privileged mode
Privileged mode runs the scheduled scan as root (Linux and macOS) or SYSTEM (Windows), so every hardening check can be assessed and every directory searched. It is opt-in and applies to the server profile only.- Linux and macOS
- Windows
"$TIGERGATE_API_KEY" before sudo runs, so the key reaches the installer. The schedule is a system systemd timer (tigergate-agent.timer) on Linux and a LaunchDaemon on macOS, still at low priority. Linger is not needed.- Where it keeps its state. The configuration and device credential live in a directory only root or Administrators can read:
/var/lib/tigergate-agenton Linux,/Library/Application Support/TigerGate/Agenton macOS,%ProgramData%\TigerGate\Agenton Windows. - Switching keeps the device. A machine moving from a standard install to privileged keeps its device record and history. Moving back to a standard install enrols it as a new device.
- Running commands. Agent commands on a privileged install need the same rights:
sudo tigergate-agent statuson Linux and macOS, an elevated PowerShell on Windows. - What it does not change. The agent still runs a scan, reports and exits, and still never sends a secret. A proxy that needs a Windows sign-in refuses a SYSTEM task, because SYSTEM has no network credentials.
Resource use
A server scan is built to run in the background without being noticed:- Low priority. The scan lowers its own priority, whatever started it: nice 10 and idle disk I/O on Linux, the background band on macOS, background mode on Windows. Other work on the server always goes first.
- CPU share. The scan holds itself to 30% of one CPU core, even on an idle server. A large disk takes longer to scan rather than using more CPU. A server scan may take up to 30 minutes.
- Memory. Memory grows with the number of packages found, not with disk size, and is released when the scan exits. The report is uploaded in chunks of up to 4 MiB, compressed with zstd, so the upload never holds the whole report in memory.
- No package limit. Every package found is reported. TigerGate assesses up to 500,000 packages per server.
Verify
Troubleshooting
| Symptom | Check |
|---|---|
| The server is not listed | tigergate-agent status, then the log: ~/.local/state/tigergate/agent/agent.log (Linux), ~/Library/Logs/TigerGate/Agent/agent.log (macOS), %LOCALAPPDATA%\TigerGate\Agent\logs\agent.log (Windows) |
| The server stopped reporting after you logged out (Linux) | Linger is not enabled: sudo loginctl enable-linger <account>. tigergate-agent install prints a note when it is off. |
| Listed, but no application packages | The agent is older than the application collector, or was installed without --profile infra. See Update an existing agent. tigergate-agent scan --dry-run --pretty lists packages_app under coverage with its status and reason. |
| Hardening tab is empty for a server | The benchmark covers Linux only. On Linux, check the host_config entry under coverage in tigergate-agent scan --dry-run --pretty. |
| An application is missing | Add its directory with --app-path, or its runtime with --runtime-home, then run tigergate-agent scan. |