SpectaShell icon SpectaShell · Security

Security

Shells that stay. Keys that don't move.

SpectaShell speaks plain SSH to your servers, keeps your shells running on them through your own login, and keeps each device’s key in a chip it never leaves. No Calida Lab server ever sees your terminal: the one server Calida Lab runs relays notifications from hosts, sealed on the host (HPKE) so that only your device can open them.

01 · The keeper

How a shell keeps running

A shell normally belongs to the connection that started it: when the connection drops, the shell is hung up and whatever ran in it ends. SpectaShell starts each shell inside a small program of its own, spectashell-keeper, on the machine where the shell runs. The keeper holds the shell and the last part of its output, so the shell keeps running when the connection drops, the device sleeps or the app quits, and it shows you its screen again when you come back.

Your Mac, iPad or iPhone

  • SpectaShell
  • This device's key, in the Secure Enclave
→your SSH login

Your server, as you

  • sshd → spectashell-keeper attach
  • keeper → its shell
  • a socket in a folder only you can open (0700)
  • no network port, no root
The listing key’s line in ~/.ssh/authorized_keys: restrict turns off the terminal, forwarding and the agent, and the forced command runs the keeper’s list, whatever the connection asks for.
restrict,command="$HOME/.local/share/spectashell/current/spectashell-keeper list" ecdsa-sha2-nistp256 AAAA… SpectaShell listing on iPhone
No account
to breach.

There is nothing of yours on a server of ours.

SpectaShell has no sign-up and no login. Sync and teams run on your own Apple Account's iCloud, so there is no Calida Lab account, no password database and no server of ours that could leak your hosts or keys.

02 · Checking the keeper

How you can trust what runs on your server

03 · Keys

A key per device, in its chip

The device key

Each Mac, iPad and iPhone makes its own key in the Secure Enclave. Its private half can't be copied out, not by SpectaShell and not by anyone holding the device. It signs only after Face ID, Touch ID or the device's password, at every login.

Agent forwarding that asks

Turn on agent forwarding for a host and that host can ask your device's key to sign — to log in elsewhere or sign a commit. Each request shows which host asks and what for, and needs your face or finger on its own. Cancel once and the connection gets no more requests.

Your own keys stay where they are

On the Mac, SpectaShell reads ~/.ssh and your SSH agent as ssh does. It never changes, copies or uploads them.

A lost device

Remove a lost device from another of yours: its keys are taken off your hosts as you reach them, and it can't list your shells again. A new device can list them only once one of yours approves it.

04 · Your data

What syncs, and what never leaves

Syncs through your iCloud

  • Hosts and groups
  • Snippets and triggers
  • Saved port forwards and favourite folders
  • Host keys you trusted

Never leaves the device

  • Private keys
  • Passwords, passphrases and one-time codes — never stored at all
  • What your shells print
  • Command history

Synced items live in your own iCloud private database. SpectaShell’s relay never holds any of it.

05 · Connections

Where SpectaShell connects, and nowhere else

06 · Notifications from hosts

The one server of ours, and what it cannot see

Settings ▸ Notifications ▸ Notify This Device lets your hosts tell this device that a program needs you while none of your devices is in front. Apple delivers a notification to an app only from the holder of the app’s push key, which cannot be on your hosts, so a relay of Calida Lab’s stands between them.

What the relay and Cloudflare see

  • Your device’s notification token
  • The public keys of the hosts that notify it, so how many there are
  • Sealed bytes of one size
  • Each request’s address, written down nowhere
  • When and how often each host sends

What they never see

  • What a notification says
  • Which host it is: its name or address
  • Your commands or anything your shells print
  • Any file
  • Any key that signs or opens
07 · Questions

Security Q&A

Can Calida Lab see my shells, hosts or keys?

No. Your shells go only between your devices and your hosts, synced settings sit in your own iCloud, and keys and passwords never leave your device. SpectaShell sends us no usage data: there are no analytics. The only thing that passes through a server of ours is a notification from a host, sealed so that only your device can open it.

Do I need an account?

No. There is nothing to sign up for and nothing to log in to. Sync and teams use the Apple Account your device is already signed in with.

How do teams work without an account?

A shared group is a CloudKit share between your Apple Accounts: only the people you invite can open it. Who may log in to a host is still decided by the host — each member uses their own device key, let in by someone who can log in there.

Does the keeper open a port on my server?

No. It listens on a Unix socket in a folder only your account can open. The only way in is your SSH login.

Does it need root?

No. The keeper runs as you, from your home folder, and installs nothing system-wide.

Who else on the server can reach my shells?

Only your account — and root, who can reach every process on a machine, as with tmux or screen. On a server whose administrators you don't trust, keep anything secret out of its shells.

What does the keeper keep, and for how long?

The shell's recent output, in memory, while the shell runs; and a small description beside its socket. Close the shell and the keeper ends and removes them at once; a shell whose program ended and that nobody opens again goes after 24 hours. In both cases a short note of how it ended stays for 30 days.

Is agent forwarding safe?

Forwarding always lets a host's root use what you forward. SpectaShell makes the device's key ask you, request by request, and refuses to let the host add or remove keys. Keys of the Mac's SSH agent are forwarded as ssh forwards them, so turn it on only for hosts you trust.

Are passwords saved?

Never. A password, passphrase or one-time code is asked when needed and forgotten once the login has it. Your own password manager (Passwords, 1Password) can fill the dialog through the system's AutoFill: it keeps the password, SpectaShell does not. After one password login, SpectaShell can put the device's key on the host so the next login needs none.

I lost my iPhone. What now?

On another of your devices, open Keys and choose Remove from Every Host… beside it. SpectaShell logs in to each of your hosts and takes its keys out; a host that was off loses them at your next login there. Its keys never go on a host again.

How do I remove SpectaShell from a server?

Close its shells, then delete ~/.local/share/spectashell and /tmp/spectashell-<your user id> (on a Mac, ~/Library/Application Support/SpectaShell/keepers), and remove the lines SpectaShell added to ~/.ssh/authorized_keys: for each device, its key, ending “SpectaShell on <device>”, and its listing key, the line that starts restrict,command= and ends “SpectaShell listing on <device>”.

Report a security issue
Back toOverview → Get notified at launch