~/.nullspace/ssh/, asks the API
for a short-lived OpenSSH user certificate for that public key, writes the
certificate locally, and runs your local ssh client against the Nullspace SSH
relay. API credentials can mint access, but relay login still requires private
key proof of possession. When the API returns relay host-key metadata, the CLI
writes a pinned known_hosts entry under ~/.nullspace/ssh/ and asks OpenSSH
to verify that host key.
When to use SSH
Use SSH when a tool expects a real OpenSSH transport, when you want an interactive shell outside the SDK, or when you need multiplexed SSH channels. For programmatic commands and file transfer, prefersandbox.commands, the
Files API, and upload/download URLs. The relay does not expose
password login or SFTP.
Quickstart
Install the CLI and OpenSSH
websocat for the default relay flow.Create a sandbox
Connect with OpenSSH
ssh process, so
shell scripts can treat the command like any other SSH target.SDK access
Use the SDK when application code needs to mint access for a caller-supplied public key:Supported behavior
| Capability | Status |
|---|---|
| Public-key proof of possession | Supported |
| Short-lived OpenSSH user certificates | Supported |
| Relay host-key pinning | Supported when host-key metadata is returned |
| Interactive shells | Supported |
| SSH exec requests | Supported |
| PTY allocation and resize | Supported |
| Multiple channels on one SSH connection | Supported |
| Password authentication | Not supported |
| SFTP and SSH subsystems | Not supported |
Troubleshooting
| Symptom | Check |
|---|---|
nullspace ssh is missing | Install the CLI extra with python -m pip install "nullspace-sdk[cli]==0.1.9". |
Permission denied (publickey) | Re-run nullspace ssh so the CLI refreshes the certificate, and make sure the matching private key is available locally. |
Certificate invalid or expired access | Mint a fresh certificate; SSH access is intentionally short-lived. |
| Host-key verification fails | Remove stale relay entries from the CLI-managed known_hosts file shown in the generated command, then retry. |
| File copy fails through SFTP | Use sandbox.files.upload, sandbox.files.download_url, or volume file APIs. |
| Relay connection is refused | Confirm the sandbox is running and that the deployment has SSH relay enabled. |
Legacy signed WebSocket fallback
Older deployments may expose SSH through a signed public port-22websocket_url with websocat in the OpenSSH ProxyCommand. That URL is a
bearer credential and is not the default product SSH flow. Prefer
nullspace ssh whenever the relay is available.