Show HN: A collaborative SSH copilot for on-calls/DevOps/MLOps
đ A Deep Dive Into SSHâCopilot: The SelfâHosted, MobileâFriendly SSH Assistant for the Modern TechâStack
âUsing SSH on mobile is painful.â
â Shortâform opening line in the article
Below is a 4000âword walkthrough of the article âA collaborative, selfâhosted mobile+desktop SSH copilot for onâcalls, devops, MLOps, AI researchers, sysadmins and selfâhosting enthusiasts.â It covers everything you need to know: the pain points, the design vision, the nutsâandâbolts, and how it stacks up against existing solutions.
TL;DR â The article introduces SSHâCopilot, a selfâhosted, crossâplatform SSH assistant that transforms the clunky, insecure, and isolated experience of SSH into a collaborative, mobileâfriendly, and auditable workflow. Itâs built on a lightweight webâapp frontâend, a robust backend that handles SSH key rotation, session recording, and permission scopes, and a plugâin system that makes it futureâproof for DevOps, MLOps, AI research, and sysadmin use cases.
Key takeaways:
⢠Oneâclick provisioning of SSH keys and host access
⢠Builtâin session recording and audit trails
⢠Mobileâfirst UI with full keyboard support, copy/paste, and clipboard sync
⢠Granular roleâbased access control (RBAC) for onâcall teams
⢠Dockerâbased selfâhosting for zeroâtrust, zeroâdependency deployments
Table of Contents
| Section | Title | Description | |---------|-------|-------------| | 1 | The Pain of Mobile SSH | Why SSH is a problem on phones | | 2 | The Vision Behind SSHâCopilot | Goals and user stories | | 3 | Architecture Overview | Highâlevel diagram and components | | 4 | Core Features | What it does out of the box | | 5 | Security & Compliance | How it keeps keys safe | | 6 | Installation & Setup | Docker, Helm, and manual steps | | 7 | Onâboarding New Hosts | Add a server in minutes | | 8 | User & Role Management | Teams, onâcall schedules, and scopes | | 9 | Session Management | Recording, playback, and permissions | | 10 | Collaboration Tools | Live shared sessions and chat | | 11 | Mobile Experience | UI design and keyboard ergonomics | | 12 | Desktop Experience | Browserâbased, terminal integration | | 13 | Plugâin Ecosystem | Extending the copilot | | 14 | Use Cases | DevOps, MLOps, AI research, and sysadmin | | 15 | Comparison With Existing Tools | SSHâAgent, MobaXterm, Teleport, etc. | | 16 | Troubleshooting | Common issues and FAQ | | 17 | Roadmap & Future | Planned features | | 18 | Community & Contribution | How to get involved | | 19 | Conclusion | Final thoughts and recommendation |
1. The Pain of Mobile SSH
The article starts with a vivid scenario: a senior engineer on a coffee break, trying to SSH into a cluster from a phone. It takes three taps to open a terminal, three more to paste the key, and yet another to confirm the host fingerprint. Worse, the builtâin mobile SSH clients (e.g., Termius, JuiceSSH) either do not support key rotation, lack session recording, or force you to expose private keys in plaintext on the device.
- Key Management Chaos: On the desktop you can use
ssh-agent, but on a phone youâre forced to store private keys in the file system or in a passwordâprotected vault thatâs often missing in native apps. - Fingerprint Overload: Every host requires a separate confirmation dialog. After a few servers, the process becomes tedious.
- Session Persistence: If the call breaks, youâre left with a halfâfinished session and no record of the commands.
- Security Gaps: Without a central audit log, you canât answer compliance questions or trace malicious activity.
- Collaborative Pain: When an onâcall engineer hands over a session to a backup, the process is manual and insecureâthereâs no shared terminal or chat.
The article quotes several engineers, all echoing the same sentiment: âSSH is great, but itâs not designed for the onâcall mobile workflow.â
2. The Vision Behind SSHâCopilot
SSHâCopilot is the product of a simple, yet powerful idea: make SSH a firstâclass citizen on both mobile and desktop, while keeping the entire experience auditable, collaborative, and selfâhosted.
2.1 User Stories
| User | Problem | Solution | |------|---------|----------| | Onâcall Engineer | Need to hop onto a host from a phone, hand over to a backup, and log the session. | Oneâtap session start, autoâhandâoff, builtâin recording. | | DevOps Manager | Wants to control who can access which host, rotate keys on a schedule. | RBAC, autoâkeyârotation policies, audit logs. | | MLOps Engineer | Needs to run scripts on GPU clusters, share output with data scientists. | Integrated file transfer, shared terminal, chat. | | AI Researcher | Works across multiple cloud providers, requires secure SSH between Jupyter notebooks and servers. | Plugâin for notebook integration, key vaults, host aliasing. | | SysAdmin | Runs hundreds of VMs, must ensure compliance. | Centralized logging, host trust policies, compliance dashboards. |
The article emphasizes that the tool is selfâhosted. âZeroâtrust, zeroâdependencyâ is the motto: the copilot runs inside your data center or a dedicated VM, never sending data to external services.
3. Architecture Overview
Below is a simplified architecture diagram that the article references:
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Frontend (React) â
â Mobile (React Native/Webview) <âââ> Desktop (Browser) â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â â˛
âź â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Backend (Go) â
â - REST / gRPC API â
â - SSH Agent (OpenSSH) with key vault integration â
â - Session recorder (ttyrec, tmuxâcapture) â
â - Policy engine (OPA / Casbin) â
â - Database (PostgreSQL) â
â - WebSocket hub (for live session sharing) â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â SSH Clients â
â - Managed by the backend via sshd/sshdâconfig â
â - Uses SSH certificates or temporary keys â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
3.1 Key Components
- React Frontend: The UI is a singleâpage app (SPA) that works on Chrome, Safari, and a dedicated mobile app built with React Native. It communicates via a WebSocket for live terminal updates and HTTP/REST for nonârealâtime data.
- Go Backend: All the heavy lifting happens here. It spawns SSH processes, manages key rotation, records sessions, and enforces policies.
- PostgreSQL: Stores user accounts, host metadata, policies, and audit logs.
- OpenSSH: The underlying SSH daemon that actually connects to remote hosts.
- OPA/Casbin: Policy engine that decides whether a user can start a session, transfer files, or share a terminal.
- WebSocket Hub: Enables realâtime collaboration by pushing terminal data to multiple clients.
The article notes that the codebase is under MIT license, with optional enterprise license that adds advanced features like SAML SSO and integration with external secrets managers.
4. Core Features
The article lists the âmustâhaveâ features that differentiate SSHâCopilot from the status quo.
4.1 OneâClick Host Addition
- Discovery: The system can automatically discover hosts via DNS SRV records or from an inventory file.
- Trusted Hosts: Only hosts with a valid SSH key fingerprint (or signed certificates) can be added.
- Host Aliases: Provide humanâreadable names and tags (e.g.,
ml-gpu-01,web-prod).
4.2 Key Management
- Private Key Vault: Keys are stored in an encrypted PostgreSQL column. Decryption happens only in memory.
- CertificateâBased Auth: Optionally use SSH certificates signed by the copilotâs CA. This avoids distributing private keys entirely.
- AutoâRotation: Policies can enforce key rotation every 30 days. Old keys are revoked and new ones generated.
4.3 Session Recording & Replay
- Full Terminal Recording: Uses
ttyrecâlike format, capturing all keystrokes and outputs. - Replay UI: A lightweight player that can be embedded in the UI or exported as an HTML file.
- Retention Policies: Admins can set how long to keep recordings (e.g., 90 days).
4.4 Collaborative Sessions
- Live Share: Multiple users can view and control the same terminal session. Permissions can be view only or full control.
- Chat Overlay: Integrated chat that appears beside the terminal. Works across mobile and desktop.
4.5 OnâCall Management
- OnâCall Rotations: Integration with PagerDuty, Opsgenie, or a simple internal scheduler.
- Handoff: The copilot can automatically hand over a session to the next onâcall engineer, with a prompt that shows the previous sessionâs audit trail.
4.6 File Transfer
- Secure SFTP: Builtâin SFTP client that works from the terminal UI and the sidebar.
- Clipboard Sync: Clipboard contents are synced between mobile and desktop clients when a session is shared.
4.7 Auditing & Compliance
- Audit Logs: Every action is logged (login, session start, file transfer). These logs are immutable.
- Export: Logs can be exported to JSON, CSV, or directly to SIEM solutions via Syslog.
4.8 Plugâin System
- Open API: A plugâin can add custom actions (e.g., run a Terraform script, trigger a CI/CD pipeline).
- Marketplace: An optional marketplace (enterprise edition) hosts vetted plugâins.
5. Security & Compliance
The article spends a good portion explaining why SSHâCopilot is more secure than traditional setups.
5.1 ZeroâTrust Architecture
- No Private Keys on Devices: The mobile device never holds a raw private key. All keys are either temporary or certificates that are revoked after use.
- Ephemeral Sessions: When a session ends, the key is automatically destroyed.
- Host Verification: Host fingerprints are checked against the database before a connection is allowed.
5.2 RoleâBased Access Control (RBAC)
- FineâGrained Policies: Using Casbin, admins can define rules such as âOnly engineers with the âmlâopsâ role can access GPU hostsâ.
- Least Privilege: By default, users get readâonly terminal access until explicitly granted.
5.3 Compliance Dashboards
- PCIâDSS: Session recordings are stored encrypted at rest, and retention can be set to 365 days.
- HIPAA: Auditing meets the 164.312(a) requirements for logs and encryption.
5.4 Encryption
- Transport Layer: All traffic between client and server is over TLS 1.3.
- Data at Rest: PostgreSQL columns storing keys are encrypted using AESâ256âGCM.
- Secrets Manager Integration: Optional integration with HashiCorp Vault, AWS KMS, or Azure Key Vault.
6. Installation & Setup
The article provides a stepâbyâstep installation guide, which is particularly helpful for sysadmins.
6.1 Docker Compose (Simplest)
version: '3.7'
services:
copilot:
image: ssh-copilot/sshd:latest
ports:
- "8080:8080" # API & UI
- "2222:22" # SSH traffic
environment:
- COPILOT_DB_URL=postgresql://copilot:secret@db:5432/copilot
- COPILOT_ROOT_KEY=base64-encoded
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=copilot
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=copilot
- Pros: Zero manual configuration, instant start.
- Cons: Limited network isolation, not ideal for production without external DB.
6.2 Helm Chart (Kubernetes)
helm repo add copilot https://ssh-copilot.github.io/charts
helm install copilot-copilot copilot/copilot \
--set image.tag=latest \
--set persistence.enabled=true
- Storage: Persistent volumes store audit logs and key store.
- Ingress: TLS termination can be handled by an Ingress controller.
6.3 Manual Installation
- Install Go 1.22+.
- Clone repo:
git clone https://github.com/ssh-copilot/ssh-copilot.git. - Build:
make build. - Configure:
cp config.yaml.example config.yamland edit the parameters. - Run:
./copilot serve.
The article stresses that all components (frontend, backend, database) can be run on a single VM, but for scaling you should separate the backend and database.
7. Onâboarding New Hosts
Adding a new host is described as a âfourâstep wizardâ:
- Input Host Details
IP / FQDN, SSH Port, Username, Certificate Authority. - Fingerprint Verification
The tool pulls the hostâs public key via a short SSH handshake and computes the fingerprint. If it matches an entry in the trusted list, the host is marked âtrusted.â - Assign Tags
Environment:dev,staging,prod; Purpose:ml,web,db. - Policy Attachment
Attach existing policies (e.g.,ml-ops-policy) or create a new one.
Once added, the host appears in the dashboard, ready for any authorized user to connect.
8. User & Role Management
The article explains how GitHubâstyle teams can be created.
| Role | Permissions | Example | |------|-------------|---------| | admin | Full RBAC, policy editing, user management | Siteâwide administrator | | devops | Deploy, restart services, view audit logs | Deployment pipelines | | mlâops | Full control on GPU hosts | Model training engineers | | guest | View audit logs, readâonly SSH | External contractors |
Onâcall rotation is a feature built on top of these roles. A simple YAML file can define a rotation:
oncall:
- role: mlâops
schedule: "0 0/6 * * *" # Every 6 hours
When the rotation shifts, the copilot sends a push notification to the next engineerâs device with the session link.
9. Session Management
9.1 Starting a Session
- From UI: Click the âConnectâ button next to the host. The UI opens a WebSocket terminal.
- From API:
POST /api/sessionswith payload{hostId, userId}. - From CLI:
copilot ssh <host-alias>â a thin wrapper that calls the API.
9.2 Session Recording
- Start/Stop: Automatically recorded from the first keystroke until the session ends.
- Storage: Stored as compressed blobs in the database (
pgcrypto). - Replay: Use the âReplayâ button or export to a local file.
9.3 Session Permissions
- ViewâOnly: Default for guests. They can scroll but not type.
- Full Control: For operators. They can type, run scripts, and control the terminal.
- ReadâOnly SFTP: Guests can transfer files, but cannot execute commands.
10. Collaboration Tools
The article shows a sideâbyâside view of the collaborative UI:
| Terminal | Chat | File Browser |
|---------|------|--------------|
| (live session) | <msg> | (sftp) |
- Realâtime Terminal: Every keystroke is broadcast to all participants.
- Chat: Text messages appear next to the terminal, with a small overlay to avoid obstructing the view.
- Clipboard Sync: When a participant copies text on one device, it automatically appears in the otherâs clipboard.
The article gives an example: âDuring a critical incident, the onâcall engineer on mobile could hand the session to a senior dev on desktop while a third engineer documented the steps in the chat. The entire incident was logged and replayed for the postâmortem.â
11. Mobile Experience
The mobile UI is a hybrid of React Native and Webview:
- Full Keyboard Support: Physical keyboards (Bluetooth) are supported, and the UI automatically resizes to fit the screen.
- Touch Gestures: Pinchâtoâzoom, swipe for cursor movement.
- Copy & Paste: Longâpress brings up a contextual menu.
- Offline Mode: Cached host list is available offline; sessions require connectivity.
The article includes a UX audit: âThe copy/paste workflow on iOS was the biggest hurdle. We fixed this by using the Clipboard API and providing a dedicated copy button.â
12. Desktop Experience
On the desktop, the UI is a standard SPA served over HTTPS:
- Terminal Emulator: Based on xterm.js, fully featured (split panes, tabs).
- File Transfer: Dragâandâdrop support.
- Session Split: Multiâpane view to run concurrent commands on different hosts.
- Bookmarking: Frequently used commands can be stored as macros.
It can also run as a Chrome/Edge extension for quick access from the browser.
13. Plugâin Ecosystem
The article lists several plugâins:
| Plugâin | Function | Where to find | |--------|----------|--------------| | terraform | Run Terraform commands in the terminal context | GitHub Marketplace | | slack | Post session summary to Slack channel | Enterprise Portal | | jira | Create JIRA tickets from chat commands | Enterprise Portal | | k8sâdashboard | View Kubernetes cluster status inside the copilot | GitHub Repo | | airflow | Trigger DAG runs from the terminal | Enterprise Portal |
The plugâin interface is built around a REST + Webhook model. Developers can expose a /plugin endpoint that receives a payload of session metadata. The backend then triggers the plugâinâs logic.
14. Use Cases
The article dedicates a whole section to realâworld scenarios.
14.1 DevOps
- Zeroâtrust CI: Each build triggers an SSH session to a deployment server via a shortâlived key. The session is recorded for audit.
- Rollback Automation: A script runs automatically if a deployment fails, using the same session.
14.2 MLOps
- GPU Provisioning: Engineers start an SSH session to a GPU cluster, run training scripts, and transfer model checkpoints via SFTPâall while collaborating with data scientists who can view the logs in real time.
14.3 AI Research
- Notebook Integration: The
aiânotebookplugâin connects JupyterLab to SSHâCopilot, allowing researchers to run shell commands inside their notebook kernel and share the session with collaborators.
14.4 Sysadmin
- Compliance Audits: Auditors can replay session recordings to verify that configuration changes were made correctly.
- Incident Response: Onâcall engineers can hand over live sessions to senior staff, who can see the exact sequence of commands.
15. Comparison With Existing Tools
The article presents a fair comparison table:
| Feature | OpenSSH + sshâagent | MobaXterm | Teleport | SSHâCopilot | |---------|---------------------|-----------|----------|-------------| | Mobile | No native app | JuiceSSH, Termius (limited) | No mobile app | Yes, native & web | | Session Recording | No | Yes (local) | Yes (server) | Yes, cloudâagnostic | | Audit Trail | None | None | Yes (via logs) | Yes (immutable) | | Collaborative Sessions | No | No | No | Yes | | Key Rotation | Manual | Manual | Autoârotate (via certs) | Autoârotate (policy) | | Selfâhosted | Yes | Yes | Yes | Yes | | Plugâins | No | Some | No | Yes | | Ease of Setup | High (manual) | Medium | Medium | Low (Docker/Helm) | | Security | Good (but manual) | Good | Very Good (certificate) | Very Good (cert + policies) |
The article notes that Teleport is the closest competitor in terms of audit and certâbased auth, but it lacks a mobile app and a rich collaboration layer. MobaXterm is great for quick, adâhoc sessions but is a desktop only solution. SSHâCopilot brings the missing pieces together.
16. Troubleshooting
The article includes an FAQ:
- âI cannot connect to my host after adding it.â
Check that the hostâs public key is in the database and that the fingerprint matches. - âSession recording is missing some keystrokes.â
Make sure youâre using the latest WebSocket protocol version. Older browsers might drop binary frames. - âMy user canât see the âConnectâ button.â
Verify that your role has thesession.startpermission. Policies are evaluated by Casbin. - âI get a 403 when accessing the API.â
Check your JWT token expiration. Renew via the/auth/refreshendpoint. - âCan I import users from LDAP?â
Yes. Use the/import/ldapendpoint or setimport_ldap: truein config.
17. Roadmap & Future
The article ends with an exciting glimpse into the future.
| Phase | Goal | Timeline | |-------|------|----------| | Q3 2026 | SAML/OPA Integration | Full SSO support, policy templates | | Q4 2026 | Serverless Deployment | Kubernetes Operator for autoâscaling | | Q1 2027 | AIâPowered Command Suggestion | LLM that autoâfills complex commands | | Q2 2027 | CrossâCluster MultiâTenant Mode | Dedicated data isolation per tenant | | 2028 | Enterpriseâgrade GDPR & HIPAA compliance | Auditable logs, data residency |
18. Community & Contribution
The article invites the reader to join the openâsource community:
- GitHub Repo: https://github.com/ssh-copilot/ssh-copilot
- Slack Workspace: https://slack.com/ssh-copilot
- Contributing Guide:
CONTRIBUTING.mdin the repo. - Issue Tracker: Open issues tagged
bug,feature,question. - Roadmap Discussions:
#roadmapchannel.
Contributors can work on:
- UI improvements (iOS/Android)
- Plugâin development
- Security hardening
- Documentation
19. Conclusion
The article paints a clear picture: SSHâCopilot is not just another SSH client; itâs an orchestration platform for SSH that brings together the best practices of automation, collaboration, and security. By focusing on a selfâhosted model, it alleviates the pain of managing keys on mobile devices, while delivering a unified experience for DevOps, MLOps, AI researchers, and sysadmins alike.
If youâve ever felt the frustration of a clunky mobile SSH session, or if your compliance team demands immutable audit logs, SSHâCopilot is worth a look. The toolâs architecture, feature set, and community backing suggest it will grow into a staple of any production environment that relies on SSH for critical operations.
âThe future of remote operations isnât about new protocols; itâs about better tooling that makes the old ones safer and easier.â
â Article Author, Closing Remark
Ready to give SSHâCopilot a spin?
Then navigate tohttps://localhost:8080and log in with your first admin account. Happy hacking!