Coming soon · Linux + OpenSSH

Your agent wants SSH.
Your phone decides.

sshbuddy holds every SSH login for one user – say, your AI agent – until you tap Allow on your phone. No VPN, no new SSH server, no vendor account. One static binary and two lines of PAM config.

Already guarding production servers. Public release coming soon.

idle
How it works

A second key that lives in your pocket

The SSH key proves who is knocking. sshbuddy asks you whether they may come in – right now, from this IP.

  1. Agent runs ssh

    With its own key, as its own Unix user. The key alone is no longer enough.

  2. sshd asks PAM

    OpenSSH's account check calls sshbuddy pam. The connection waits.

  3. Your phone buzzes

    A push via ntfy shows who, where and from which IP – with three buttons.

  4. You tap, it opens

    Allow once, allow for 30 minutes, or deny. No answer in 90 s means no.

Why sshbuddy

Small enough to read. Strict enough to trust.

About 650 lines of Go with no dependencies outside the standard library. Small enough to audit over a coffee.

Fails closed

Deny, timeout, ntfy unreachable, broken config, wrong PAM phase: every one of them ends in “no”.

One static binary

No curl, bash or Python on the server, no daemon to keep alive. pam_exec starts it per login.

Keeps your OpenSSH

No replacement sshd, no proxy, no tunnel. Your hardening, keys and firewall stay exactly as they are.

Scoped to one user

One PAM rule picks who needs approval. Your own logins and root stay untouched.

Time-boxed windows

“Allow 30 min” covers the next logins from the same IP. Kept in tmpfs, gone on reboot, sshbuddy revoke ends them now.

Every decision logged

ALLOW and DENY with user, IP and reason go to syslog. journalctl -t sshbuddy is your audit trail.

One-time request IDs

Each push carries a fresh nonce. An old or stray button tap cannot approve a new login.

No account, no fee

Uses the free ntfy app on iOS and Android with random 32-character topics – or your own ntfy server.

Removable in seconds

Delete two PAM lines and you are back to plain key login. Nothing else to uninstall.

Built for AI agents

Let the agent read the logs. Keep your hand on the door.

Coding agents are good at debugging production: tail a log, check a container, restart a service. But a key on the agent's machine works at 3 a.m. too – for the agent, a prompt injection, or whoever gets hold of that machine. sshbuddy puts you back in the loop without slowing you down.

  • You see every attempt. A login you did not expect is a buzz on your phone, not a line in a log nobody reads.
  • Pairs with least privilege. A separate agent user, plus small sudo helpers for the few things it may do.
  • Works with any agent. Claude Code, Codex, Cursor, a cron job – if it speaks SSH, sshbuddy can gate it.
  • Approve a session, not every keystroke. “Allow 30 min” lets a debugging session flow without a push per command.

journalctl -t sshbuddy

Every decision is one line with user, client IP and reason.

Compared

The smallest tool that does the job

Teams with an identity provider and a security budget have great options. sshbuddy is for the server you run yourself and the agent you just gave a key.

sshbuddyTailscale SSH
(check mode)
Duo UnixTeleport
(access requests)
Keeps your OpenSSH serverYesNo, Tailscale's SSH serverYesNo, Teleport agent and proxy
How you approvePush with buttonsRe-login with your identity providerDuo Mobile pushRequest reviewed in Teleport or chat
Vendor account neededNoYesYesSelf-hosted or cloud
VPN or overlay networkNot neededRequiredNot neededProxy required
Install on the server1 binary, 2 PAM linesTailscale daemon, ACLsPackage, PAM, admin panelAgent, auth and proxy services

Based on each product's public documentation, November 2026. Something out of date? Let us know.

Honest limits

What sshbuddy does not do (yet)

Approves logins, not commands

Once in, the session can do whatever its Unix user may do. Keep that user small. Per-command approval is on the roadmap.

The topic name is the secret

On public ntfy.sh, whoever knows the reply topic can approve. The config is root-only and topics are random; self-host ntfy for more.

Never give the agent root

Root can read the config or delete the PAM line. sshbuddy only protects a user that cannot change it.

Coming soon

Five minutes. Two PAM lines.
Every login asks first.

sshbuddy already guards our own production servers. The public release – installer, releases and docs – is on its way. Runs on Linux with OpenSSH and PAM.