a73x

docs/quickstart.md

Ref:   Size: 3.0 KiB   History

# Quickstart

*From nothing to a VM you can SSH into*

eitri.sh runs a control plane so you don't have to. You bring the
hardware; the console, sync, and SSH gate are already up. No server
install at all. Prefer to run the plane yourself? [self-hosting](self-hosting.md)
does the same job on your own box, and the three steps below are unchanged
after it.

## Create an account

Open <https://console.eitri.sh> and sign in with Google. Your first
sign-in creates your tenant.

## Join a host

Any machine with KVM, or a Mac. **+ Add host** in the console prints a one-shot
command; the machine dials out, and no inbound port is needed.
[joining](joining.md) has the commands for both, and the sharp edges of a Mac.

## Start a client

SSH access uses certificates signed by **your** CA—eitri never holds a user key
that can enter your VMs. A guest trusts the CA set it is created with, so the
client and its CA come before your first VM. One binary, targeting the hosted
service by default:

```sh
OS=$(uname -s | tr A-Z a-z) ARCH=amd64             # arm64 laptop → ARCH=arm64
curl -fsSLO https://eitri.sh/dl/latest/SHA256SUMS
V=$(sed -n "s/.*eitri-cli_\(v[^_]*\)_${OS}_${ARCH}\.tar\.gz\$/\1/p" SHA256SUMS)
curl -fsSLO "https://eitri.sh/dl/latest/eitri-cli_${V}_${OS}_${ARCH}.tar.gz"
sha256sum -c SHA256SUMS --ignore-missing
tar xzf "eitri-cli_${V}_${OS}_${ARCH}.tar.gz"
sudo install -m 0755 "eitri-cli_${V}_${OS}_${ARCH}/eitri" /usr/local/bin/eitri
```

Then the guided setup:

```sh
eitri init
```

It asks for a personal access token—mint one in the console under **Settings →
Personal access tokens**—then registers a CA if your tenant has none, generating
one only if you have no key it can use, and writes `~/.eitri/config.json`.
Nothing happens without a `y`. [connecting](connecting.md) walks each step.

## Boot a VM

Console → **+ Create VM**, pick your host, create. Watch it boot in the browser
serial console. Defaults: 2 vCPUs, 2048 MB, 10 GB, the default image; status
reads `creating` while the image downloads and the guest boots, then `ready`.

A tenant with no registered CA is refused here, rather than handed a guest that
nothing can reach: the CA set is baked into the guest at create and registering
one afterwards does not reach a VM that already exists. Register a CA first—the
console's Settings page, `eitri ca upload <ca.pub>`, or the MCP `ca_upload`
tool—then create the VM.

## SSH in

`eitri init` wrote the plane, the gate and your tenant, so there is nothing
left to set:

```sh
eitri ssh <vm-name>
eitri ssh <vm-name> uptime
```

Skipped init? The console and gate fall back to the hosted defaults, and
`EITRI_TOKEN` alone is enough—`eitri ssh` asks the plane for your tenant and
its gate.

## Then what

- [connecting](connecting.md)—the jump gate, your CA, and `eitri ssh` by hand
- [networking](networking.md)—publishing a port, or putting a VM on your LAN
- [mcp](mcp.md)—letting an AI agent create and drive VMs
- [upgrade](upgrade.md)—upgrading agents, the server, cloud-hypervisor