PocketTop is an iOS app for monitoring and acting on Linux machines you control. This page covers setup, common issues, and how to file a bug.
~/.ssh/authorized_keys on the target machine.ssh-keyscan -t ed25519 your-host | ssh-keygen -lf -).Your machine needs:
sudo (or root) for the install. After install, the app does not need SSH again for normal use.ufw is active it will open the chosen port).systemd — Debian, Ubuntu, Fedora, Arch, and anything else modern.Your iPhone cannot reach the host's SSH port. Check from another device on the same network:
ssh -p 22 user@your-host
If that fails too, the issue is on the network side (firewall, wrong IP, SSH not running). If it succeeds, double-check the host/port you typed in PocketTop, and confirm your phone is on a network that can reach that host.
PocketTop uses an Ed25519 keypair stored in your iOS Keychain. The setup
screen shows you the matching public key — paste it into
~/.ssh/authorized_keys on the target server (one line, exactly
as shown, no extra newlines). Re-try the setup. The same key is reused
across all servers you add.
The app refuses the connection if the server's SSH host key doesn't match what was pinned at setup. Either the server was rebuilt, you are connecting to a different machine at the same address, or something is wrong. If the change is expected, remove and re-add the host in PocketTop. If it is not expected, do not connect — investigate first.
The install runs detached on the server (under systemd-run) so
it survives the SSH connection dropping. Check the install log on the
server:
sudo journalctl -u run-* | tail -200 sudo cat /var/log/pockettop-install.log # if present
Most failures are: wrong sudo password, the chosen TCP port is already
bound, the server has no openssl available to generate the
self-signed cert, or there is no internet access on the server (rare —
install is fully offline-capable, but some distros need a one-time
package-manager refresh for utilities like curl).
On the server:
sudo systemctl status pockettopd sudo journalctl -u pockettopd -n 200 --no-pager
The service should be active (running). From a machine on the same network as the server you can sanity-check the API:
curl -k https://your-host:443/health
Expect 200 OK. If you see connection refused, the
service crashed. If you see certificate-related errors,
something on the server regenerated the cert — remove and re-add the host
in PocketTop so the app can pin the new fingerprint.
The agent runs as root. It sends SIGTERM first, waits briefly, then SIGKILL. If the process still won't die, it is a kernel-level uninterruptible wait (D-state) — usually a stuck I/O. The fix is on the server side, not in the app.
iOS requires explicit permission to connect to private (RFC 1918) and link-local addresses. The first time PocketTop tries this, iOS shows a permission prompt. If you tapped Don't Allow, open Settings → Privacy & Security → Local Network → PocketTop and turn it on.
Correct — by design. Removing the host in the app deletes credentials and
pinning from your device, but the pockettopd service keeps
running on the server. To uninstall the agent, on the server:
sudo systemctl disable --now pockettopd sudo rm -rf /opt/pockettop /etc/systemd/system/pockettopd.service sudo systemctl daemon-reload
Please file issues on GitHub: github.com/bardiabarabadi/PocketTop/issues.
Useful info to include:
sudo journalctl -u pockettopd -n 200 --no-pager
See the privacy policy. Short version: PocketTop has no backend; the app talks only to the machines you point it at; we collect nothing.
PocketTop is open source under GPL-3.0: github.com/bardiabarabadi/PocketTop.