Veil Keys Docs

SSH key brokering

An SSH private key on a laptop is a key on a laptop — copyable, exfiltratable, and impossible to truly revoke once it’s been on disk. Veil’s SSH brokering keeps the private key off the client entirely. Veil holds your SSH key encrypted and signs authentication challenges server-side with ed25519. Your git push and ssh commands work exactly as before — but every signature happens at Veil, and the private key is never on the machine doing the connecting.

ssh / git
on your machine
challenge to sign
Veil Keys
signs the challenge
ed25519 signature
GitHub / server
verifies signature
The challenge goes up; a signature comes back. The private key stays encrypted on Veil's side the whole time.

Public key out, private key never

You get an SSH key into Veil one of two ways, and both leave the private half sign-only:

  • Generate a new key inside Veil. You receive the public key to paste into GitHub or onto your servers. The private key is created and stored encrypted; it is never displayed.
  • Import an existing ed25519 key. Once imported, its public key is exposed but the private key becomes sign-only and can never be revealed again — not even to you.

Use it like a normal agent

Mint an SSH token (it starts with veil_ssh_) and start the Veil SSH agent. It sets SSH_AUTH_SOCK, so every tool that speaks the SSH agent protocol routes its signatures to Veil:

shell
$ eval "$(VEIL_SSH_TOKEN=veil_ssh_… veil ssh-agent)"
✓ SSH_AUTH_SOCK set · signing via veil
$ ssh-add -l
256 SHA256:… deploy-key (ED25519)
$ git push origin main
→ signature requested · signed at veil · pushed

Nothing about your workflow changes. ssh-add -l lists your keys, git push and ssh just work — the difference is invisible at the command line and decisive in your threat model.

Every signature is gated and audited

A signature isn’t free. Each one is checked against:

And every signature is written to the audit log: which key, when, by which token. If a token leaks, revoke it in the app and signing stops instantly — no key rotation, no scrubbing laptops, because the secret was never distributed in the first place.

See the CLI reference for veil ssh-agent flags and tokens for how SSH tokens are walled off from agent and CI tokens.