# Install the agent on many servers The InfraNest agent reports CPU, memory, disk, load and service health from Linux and Windows servers. It only ever sends: it takes no instructions, runs no commands, opens no ports, and runs as its own unprivileged user. It is open source: . Before you roll it out: [Network requirements](network-requirements.md) lists what it connects to (one outbound HTTPS host, nothing inbound), and [What it sends](what-it-sends.md) lists every field. **Runnable code:** an Ansible role (Linux and Windows) and a `cloud-init.yaml` that install the agent with one server token per host are in [`infranest-examples/examples/agent-install`](https://github.com/InfraNest-Infrastructure-Organized/infranest-examples/tree/main/examples/agent-install). Until enrollment keys arrive (below), each host needs its own token. ## One server Open the server in InfraNest, go to **Metrics** and choose **Install agent**. It gives you one line with the token already in it: ```sh curl -fsSL https://get.infranest.io/agent.sh | sudo sh -s -- --token sat_YOUR_TOKEN ``` On Windows: ```powershell irm https://get.infranest.io/agent.ps1 -OutFile install.ps1 .\install.ps1 -Token sat_YOUR_TOKEN ``` ## Many servers (Coming) An **enrollment key**, created under **Settings → Server agent**, will install the agent on as many servers as you allow from one cloud-init file or Ansible role. Each server still gets its own token on first start, so revoking one server never touches the others. Until then, each server needs its own token from the app. ## See what it sends Run this on any machine to print the exact JSON it would send. It sends nothing: ```sh infranest-agent print ``` The full field list is in the repository's `PAYLOAD.md`. ## Check it worked ```sh sudo infranest-agent status ``` The server shows live metrics in InfraNest within a minute.