Free · one server · no account needed
See which stacks need attention
Run one command or paste anonymized JSON for your server rating, verdict, and a risk summary by stack.
Checking now
- Ubuntu
- Debian
- Alpine
- RHEL
- Rocky Linux
- AlmaLinux
- openSUSE / SUSE
- Docker
- Kubernetes
- PHP
- Composer
- Python
- Node.js
- nginx
- Apache
- MySQL
- MariaDB
- PostgreSQL
- Redis
Coming soon
- Windows Server
- Java / Maven
- Go
- Ruby
- .NET
- Rust
Run this on your server
curl -fsSL https://patchfirst.dev/check.sh | shPython is optional. You need curl and sh; Python 3.8+ with cryptography uses the zipapp, otherwise Linux x86_64 uses a binary. Its SHA-256 is checked against the same HTTPS service: this checks integrity and is not an independent signature. No root access required.
Preview data before sending
The command above runs a normal check. With any launch method, --json shows anonymized JSON without sending it:
curl -fsSL https://patchfirst.dev/check.sh | sh -s -- --jsonAlternatively, download the zipapp and run it manually with Python 3.8+. Install python3-cryptography to encrypt names. The same flag previews the data:
curl -fsSLo psr-agent.pyz https://patchfirst.dev/agent/psr-agent.pyz &&
python3 psr-agent.pyz check --jsonAfter reviewing the JSON, send the data and get a report link:
python3 psr-agent.pyz check --api https://patchfirst.devCheck another server over SSH
Ready-to-run binaries are available only for Linux x86_64 (use the musl variant on Alpine). Download the appropriate variant using the “Binary without Python” instructions. The target Linux server only needs sh; anonymization and encryption run on your machine.
TMPDIR="$HOME" ./psr-agent check --ssh user@host --ssh-opt StrictHostKeyChecking=accept-new --api https://patchfirst.devOn macOS and other systems, use the .pyz: you need Python 3.8+, cryptography to encrypt names, and an SSH client. Download the agent and run the check:
curl --retry 3 -fsSLo psr-agent.pyz https://patchfirst.dev/agent/psr-agent.pyz &&
python3 psr-agent.pyz check --ssh user@host --ssh-opt StrictHostKeyChecking=accept-new --api https://patchfirst.devStrictHostKeyChecking=accept-new saves the key on the first connection and rejects changed keys. Verify the server fingerprint separately before connecting for the first time.
Review the JSON, then send it yourself
Download the zipapp and print JSON using Python 3.8+. Without Python, use the binary option below.
curl -fsSLo psr-agent.pyz https://patchfirst.dev/agent/psr-agent.pyzpython3 psr-agent.pyz check --jsonBinary without Python
Linux x86_64: download the binary and check SHA-256 before running it. The checksum comes from the same HTTPS service and does not replace an independent signature. For Alpine, replace psr-agent-linux-x86_64 in every command with psr-agent-linux-x86_64-musl. For aarch64, use Python 3.8+ or run from another machine with --ssh.
curl -fsSLo psr-agent https://patchfirst.dev/agent/psr-agent-linux-x86_64
curl -fsSLo SHA256SUMS https://patchfirst.dev/agent/SHA256SUMS
expected=$(awk '$2 == "psr-agent-linux-x86_64" {print $1}' SHA256SUMS)
printf '%s psr-agent\n' "$expected" | sha256sum -c - &&
chmod 700 psr-agent && TMPDIR="$HOME" ./psr-agent check --jsonCopy only the JSON from standard output. The agent prints a separate names key to stderr. Paste it below if you want readable names; it stays in your browser.
Keep your server protected
All findings, fixed versions, and recommendations. From $3/month per server.
Reports are available for 7 days. The link includes keys: anyone with it can open the report.