feat: add connections, a saved SSH connection manager#6483
feat: add connections, a saved SSH connection manager#6483gustavosbarreto wants to merge 1 commit into
Conversation
811282a to
642aaf5
Compare
e3240d0 to
3c57555
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 21m 18s —— View job Code Review CompleteReviewed 94 files across code quality, security, testing, Go/TypeScript patterns, and architecture (including cross-repo impact on SummaryThis is a well-structured MVP. The SSRF egress guardian ( The one finding is that Additional notes
To request another review round, comment |
3c57555 to
b27ccd3
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 7m 51s —— View job Code Review CompleteReviewed 94 files across code quality, security, testing, Go/TypeScript patterns, and architecture (including cross-repo impact on SummaryWell-structured MVP. The SSRF egress guardian ( The one finding is that Additional notes
To request another review round, comment |
75d8f91 to
57571b8
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 19m 19s —— View job Code Review CompleteReviewed 96 files across code quality, security, testing, Go/TypeScript patterns, and architecture (including cross-repo impact on SummaryThird review round — both previously flagged issues ( The codebase demonstrates solid practices throughout: SSRF egress protection via socket-level validation ( Additional notesThe observations from prior rounds still apply as follow-up considerations (not blockers):
To request another review round, comment |
57571b8 to
5a03aa8
Compare
A personal address book for reaching SSH targets from the browser: saved external hosts (dialed straight through an SSRF guardian, no agent) and ShellHub devices, each with its own auth. Keys come from the vault or a one-off paste, and host keys are pinned on a trust-on-first-use basis. The target kind is fixed at creation. Team connections are a Cloud/Enterprise capability, surfaced as an upsell on the Community edition.
5a03aa8 to
0a5dff8
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 2m 8s —— View job Code Review
|

Connections are saved SSH targets, kept separate from devices. A connection targets either a direct host (dial
host:portdirectly, with no agent) or a device (an agent-registered machine reached through the gateway). It adds a connection-manager entry point alongside the fleet.Direct connections are dialed by the ssh service over a lightweight
/ws/connectbridge, independent of the device session machinery. Device connections reuse the existing terminal flow.Reachability is probed server-side over TCP: shown per row in the list and checked at save time, where an unreachable direct host surfaces a hint to install the agent (for hosts behind NAT or a firewall) with a save-anyway override.
What changed
connectionroutes/service/store across pg, with migrations007_connectionsand008_connection_device_target, new permissions, request/response models./ws/connectbridge inssh/web/connect.gothat dials direct hosts independently of the device session machinery.Screenshots
Connections list — direct hosts and devices side by side, each with a live status dot.
Add a connection — direct host — dial a host by address, no agent required.
Unreachable host → install-the-agent funnel — save-time TCP probe; if the host can't be reached, it nudges toward installing the agent (NAT/firewall), with a save-anyway override.
Add a connection — device — pick an agent-registered machine via a server-side searched picker.
Connect — device connections reuse the rich terminal/auth flow.
Screenshots are hotlinked from branch
docs/connections-screenshots(images only, deletable once this PR closes).