Monitor a Linux Server from Your iPhone

There are two quite different jobs hiding under the word monitoring. One is answering what is happening right now, which you can do over SSH with no infrastructure at all. The other is knowing what happened at three in the morning while you were asleep, and being told at the time rather than discovering it later, which needs something running on the server that keeps watching when you are not. This covers both, and is honest about the fact that the first needs nothing installed and the second does.

Written by the GateShell team at Hefty Innovations

Step by step

  1. 1

    Start with what needs nothing installed

    Connect and open the Overview tab. CPU, memory, swap, load average, disk usage, uptime, and kernel version are read live over your existing SSH session. For most questions (is it up, is something eating the CPU, is the disk nearly full) this is the whole answer, and the cost is one SSH connection. No agent, no exporter, no scrape target, no dashboards to configure.

  2. 2

    Understand the cost of polling over SSH

    Worth knowing before you leave the app refreshing. Every refresh opens a connection and runs the underlying commands, so a screen you keep open is real repeated load and real round-trip latency on every pull. That is fine occasionally and wasteful continuously, and it is the specific problem the optional agent exists to solve.

  3. 3

    Install the agent if you want history or alerts

    The agent is a single open-source Go binary that runs on the server it watches. GateShell installs it with a one-line command over the SSH session already open, injecting a pairing token as it goes. It does not SSH anywhere itself, holds no SSH credentials, and is not a coordinator. It is one binary per server, reading that server's own state.

  4. 4

    Choose how often it samples

    Set the interval to 30 seconds, one minute, five minutes, or off, from the app. The collector applies the change at runtime without a restart and remembers it across reboots. This is the load-versus-freshness dial: 30 seconds on a box you are actively debugging, five minutes on something that just needs to be watched.

  5. 5

    Read the history it keeps

    Samples are stored on the server in tiered retention: every sample for a day, one per minute for a week, one per hour for ninety days. That shape answers the question you actually have after an incident: was this building for hours, or did it happen all at once? The app pulls ranges over REST and can subscribe over WebSocket for live updates while open. The data never leaves your server except when you ask for it.

  6. 6

    Set thresholds and let it find you

    There are three alert types, deliberately: a service going up or down, a disk crossing its threshold, and a cron job failing. Set the thresholds you care about and the agent notifies your device even with the app closed. Apple requires push notifications to be signed with the developer key, so the agent forwards alerts through a small stateless relay that signs them and keeps nothing: no token registry, no history, and no server names or alert text in its logs. Every device you have paired gets the alert, and a rule can repeat on an interval you choose while the problem is still there.

Frequently asked questions

Do I have to install the agent?+

No. Without it, everything works as it always has, with live metrics and all the service dashboards over your direct SSH connection. The agent adds scheduled sampling, retained history, and alerts that reach a closed app. It is additive, and skipping it costs you nothing you had before.

Does my monitoring data go to GateShell?+

No. The agent runs on your server and stores its history there in an embedded database. The app reads it directly from your box. The only thing that ever touches our infrastructure is an alert notification in transit to Apple's push service, and only if you enable alerts, and that relay stores nothing about it.

How is this different from Prometheus or Netdata?+

Scope and intent. Those are full observability stacks with query languages, long retention, and their own dashboards, which is the right answer for a fleet under sustained scrutiny. This is deliberately small: a single binary with fixed retention tiers and three alert types, aimed at knowing whether your handful of servers are healthy from a phone. If you already run Prometheus, keep it.

What does the agent need to run?+

A Linux server you can already SSH into, and somewhere to run as a systemd service. It reads local state from /proc, docker, systemctl, pm2, and cron. Reachability is yours to arrange, exactly as it is for SSH: a public address or your own VPN. GateShell adds no networking of its own: no mesh, no tunnel, no relay for the data itself.

Is it open source?+

Yes. It is a Go binary you can read before running on your own infrastructure, which matters for something you are installing as a service with a one-line command.

Try it in GateShell

GateShell is a zero-backend SSH client for iPhone, iPad, and Mac, with no vendor cloud, no accounts and no telemetry. Everything above works out of the box.

Guide reflects GateShell's shipped features as of September 2026. Steps assume basic familiarity with SSH and the command line; server-side commands may vary by distribution. All product names, logos, and brands are property of their respective owners.