Skip to main content

1. Generate a key (if you don’t have one)

macOS / Linux
ssh-keygen -t ed25519 -C "you@gpuoutlet.com"
Windows (PowerShell)
ssh-keygen -t ed25519 -C "you@gpuoutlet.com"
Accept the default location. Either skip the passphrase (faster) or set one (more secure — recommended for shared machines). The command creates two files:
  • ~/.ssh/id_ed25519 — your private key. Never share. Never paste anywhere.
  • ~/.ssh/id_ed25519.pub — your public key. Safe to share.

2. Add the public key

macOS
cat ~/.ssh/id_ed25519.pub | pbcopy
Linux (with xclip)
cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard
Windows PowerShell
Get-Content ~/.ssh/id_ed25519.pub | Set-Clipboard
Now in the dashboard: Settings → SSH keys → + Add key. Paste, give it a name (macbook-2026), save.

3. Connect to an instance

After launching a pod, the modal shows something like:
ssh root@123.45.67.89 -p 22001
Copy that, paste into your terminal:
ssh root@123.45.67.89 -p 22001
# The authenticity of host '[123.45.67.89]:22001' can't be established.
# ED25519 key fingerprint is SHA256:abc…
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
# Welcome to Ubuntu 24.04 …
root@gpu-pod-01:~#
Confirm yes at the fingerprint prompt the first time.

4. Save the connection in your SSH config

If you’ll reconnect often:
~/.ssh/config
Host gpu-rtx4090
    HostName 123.45.67.89
    Port 22001
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
Then just ssh gpu-rtx4090. StrictHostKeyChecking no + the /dev/null known_hosts trick is reasonable here because every rental gets a fresh IP and you’d otherwise build up a giant known_hosts that you’d have to clear.

Troubleshooting

Your local key isn’t matching any of the keys you’ve added. Verify:
ssh-add -L | grep ed25519
Should match the key you pasted in the dashboard. If it doesn’t, you may have multiple keys — pass -i explicitly:
ssh -i ~/.ssh/id_ed25519 root@host -p 22001
Three causes:
  1. Pod still provisioning — wait until status says running in the dashboard
  2. Wrong port — every pod gets a random high port. Check the modal.
  3. Your firewall — corporate VPNs sometimes block outbound on non-standard ports. Test from a different network.
Pod’s SSH daemon isn’t up yet — happens during the last 5 seconds of provisioning. Wait, retry.
You probably deleted the key from the dashboard and launched a new pod. New pods only see the keys present at the moment of launch. Re-add the key, launch a fresh pod.
Either use -i ~/.ssh/specific_key per-command or pin it in ~/.ssh/config per-host (see above).

Copying files

Local → pod (entire folder)
rsync -avz --progress ./project root@host:/root/ -e "ssh -p 22001"
Pod → local (single file)
scp -P 22001 root@host:/root/output.bin ./
Pod → S3 (from inside the pod)
aws s3 cp /root/model.safetensors s3://your-bucket/

Port forwarding (Jupyter, vLLM web UI, etc.)

If you’re running Jupyter on port 8888 inside the pod and want it on localhost:8888 locally:
ssh -L 8888:localhost:8888 root@host -p 22001
Then open http://localhost:8888 in your browser.