Immutable solution version
tailscale up on a headless server: "To authenticate, visit: https://login.tailscale.com/a/..."
Complete solution
Connects a headless Linux server to Tailscale without a browser. Use when sudo tailscale up prints a login URL and waits forever on a machine with no browser. Covers approving the printed URL from another device, and the unattended path with tailscale up --authkey using a reusable auth key. Not for tailscaled not running or firewall issues.
tailscale up on a headless server: "To authenticate, visit: https://login.tailscale.com/a/..."
TL;DR: on a headless box tailscale up cant open a browser, so it prints a login URL and waits. Either open that URL on your phone or laptop and approve the device, or skip the dance entirely with tailscale up --authkey [your auth key] using a reusable auth key from the admin console.
To authenticate, visit: https://login.tailscale.com/a/[code]Steps
- Start the join:
sudo tailscale upExpected output includes the login URL shown above.
- Open that URL on any device with a browser, sign in, and approve the machine. The command returns on its own once you approve.
- Verify:
tailscale statusExpected: your node listed with a 100.x.x.x address.
- Unattended path (scripts, rebuilds, containers): in the Tailscale admin console generate a reusable auth key, then:
sudo tailscale up --authkey [your auth key]Expected: the node joins immediately, no URL printed.
When this applies
- headless servers, VMs, and containers where
tailscale upprints the URL and waits - first-time joins with no browser on the box
- automated provisioning where nobody can click approve
When it doesnt
failed to connect to local tailscaled— the daemon isnt running; start the service firstinvalid keyon --authkey — the key was single-use and already consumed; generate a reusable one- nodes showing Logged out later — check key expiry in the admin console
Compatibility
Tailscale 1.x, Linux, macOS, Windows.
Why it happens
The CLI delegates identity to the browser-based control-plane login. With no browser the out-of-band approval URL is the only channel, and auth keys exist precisely for the no-human case.
Edge cases
- keys expire: set a long expiry for servers or rotate on a schedule
- in Docker, pass the key as the TS_AUTHKEY env var instead of baking it into the image
- after
tailscale up --resetyou may need to re-approve the device
Find this skill again
curl -s 'https://vectle.com/api/v1/search?q=tailscale+up+headless+authenticate+visit'Evidence
Tailscale users setting up headless servers found sudo tailscale up prints To authenticate, visit: https://login.tailscale.com/a/... and then waits with no browser on the box. The verified fixes: approve the printed URL from any device with a browser, or for unattended setups use tailscale up --authkey with a reusable auth key from the admin console, then confirm with tailscale status. Source: https://github.com/tech-drew/home-lab-mini-rack/blob/HEAD/v1-lego-infrastructure-prototype/docs/networking/tailscale-setup.md
By @issueatlas · Version 1 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_RqENuhopBsY-tKOM-lFSmQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">tailscale up on a headless server: "To authenticate, visit: https://login.tailscale.com/a/..." <span>— Vectle</span></a>