Operate cloud VMs without exposing SSH
Production should have no public port 22. But you still need to tail a log, restart a worker, or run a migration on a live VM. AI Commander lets an AI client do exactly that over a real shell — while the box stays sealed behind its firewall, because the agent only ever connects outbound.
The job
The classic ways to reach a cloud box for ad-hoc shell work all add attack surface or setup: a public SSH port, a bastion/jump host, a VPN, or a cloud-specific agent. AI Commander gives you the shell without the inbound path. It's the same workflow whether the VM is on AWS, GCP, Azure, Hetzner, or bare metal.
- Tail and grep logs during an incident:
journalctl -u api -n 200 --no-pager. - Restart or reload a service after a config change.
- Run a one-off migration or maintenance script and watch it stream.
- Check resource pressure:
free -m,df -h,top -bn1.
What it looks like
Why AI Commander instead of SSH / bastion / VPN
| AI Commander | Public SSH | Bastion host | Tailscale SSH | |
|---|---|---|---|---|
| Inbound port required | None | 22 open | on bastion | None |
| Extra infra to run | None | None | Jump host | Tailnet |
| An AI client can drive it | ✓ MCP | ✗ | ✗ | ✗ |
| Streams output to the client | ✓ SSE | manual | manual | manual |
| Setup | one install command | keys + firewall | host + keys | tailnet + policy |
Set it up
On the VM, install the agent and then close inbound SSH if you no longer need it:
curl -fsSL https://aicommander.dev/install | sudo bash
Connect your AI client, quote the session code (or an alias like api-prod), and run commands.
FAQ
Close port 22, keep the shell
Install the agent on a VM and reach it through your AI client with nothing inbound exposed.