# ironwire > ironwire is a hosting platform of real KVM Linux microVMs ("machines") managed > entirely over SSH: your SSH key is your account, every machine gets a root > shell and a live https URL the moment it boots, and one monthly pool of > CPU/RAM/disk is yours to cut into one big machine or up to 50 small ones. > Built for agents and operators: machines boot and fork in seconds. Everything > is driven over SSH — the `ssh` client you already have is the whole tool, > there is nothing to install and nothing to download. There is no web control panel. One surface — SSH — drives everything: - `ssh dashboard@ironwire.sh` — the interactive dashboard (a terminal UI). - `ssh dashboard@ironwire.sh ` — one-off console commands (`list`, `create `, `stop `, …); with no command it opens the dashboard. - `ssh +@ironwire.sh` — a root shell on one of your machines. ## Getting an account Two ways in, to the same kind of account: - On the web: https://ironwire.sh/signup — pick a handle, an email and a pool size, create a passkey, pay. The passkey then signs in to the ironwire app, and approves an SSH key: run `ssh ironwire.sh` with that key and choose "log in to existing account". - Over SSH, one command: ssh ironwire.sh signup --accept-terms It does not wait. It reserves the handle and prints a payment link and a QR of that link (scan it to pay from a phone). The account exists the moment the payment lands; then just connect. `--units N` buys a larger pool, and `signup --abort` releases a handle you reserved by mistake. Running signup again before paying returns the same link — it never opens a second checkout. An invite code (`iw-XXXX-XXXX-XXXX-XXXX`) works too: run `ssh ironwire.sh` and choose "enter an invite code". If signups are ever closed or the fleet is full, both doors offer the waitlist instead (https://ironwire.sh/join). ## Running commands in a machine, and moving files To run a one-off command *inside* a machine — a build, a test, a script — address the machine in the SSH username and pass the command, exactly like plain SSH. The command's exit code becomes the SSH exit code, so an agent reads success or failure directly; stdout and stderr stream back: ssh +@ironwire.sh 'cd /root/app && make test' Copy files with a `tar` stream over that same SSH channel — one continuous stream, so a whole tree moves in a single round trip. Push a local path in: tar c -C ./build . | ssh +@ironwire.sh 'tar x -C /root/app' Pull a remote path out: ssh +@ironwire.sh 'tar c -C /root/app dist' | tar x -C ./local On first connect SSH pins the front door's host key (the same key for every machine, so you accept it once). `tar` is present in every machine image. ## Docs - [Getting started](https://ironwire.sh/documentation/getting-started) - [Connecting & keys](https://ironwire.sh/documentation/connecting) - [Machines & lifecycle](https://ironwire.sh/documentation/machines) - [Networking & URLs](https://ironwire.sh/documentation/networking) - [Outposts: your own hardware](https://ironwire.sh/documentation/outposts) - [The shared drive](https://ironwire.sh/documentation/shared-drive) - [Files over SFTP](https://ironwire.sh/documentation/sftp) - [Environment variables](https://ironwire.sh/documentation/environment) - [Egress proxies](https://ironwire.sh/documentation/proxies) - [Connections](https://ironwire.sh/documentation/connections) - [The app & agents](https://ironwire.sh/documentation/agents) - [Custom agents](https://ironwire.sh/documentation/custom-agents) - [Fleet access & orders](https://ironwire.sh/documentation/fleet-access) - [Quotas & budgets](https://ironwire.sh/documentation/quotas) - [The dashboard](https://ironwire.sh/documentation/dashboard) - [Command reference](https://ironwire.sh/documentation/commands) ## Legal [Terms of service](https://ironwire.sh/terms) · [Privacy policy](https://ironwire.sh/privacy) · [Data processing agreement](https://ironwire.sh/dpa) ## Full docs for LLMs The complete documentation in one file: https://ironwire.sh/llms-full.txt