Web terminal: open a shell on a site from the dashboard
Hammerhead signs in to the site's Bamboo SSH server through the SSH port an edge exposes, with a key of its own, and relays the shell to the browser over a WebSocket (xterm.js, served by Hammerhead). The SSH dialog shows Hammerhead's public key to add to authorized_keys. Host keys are saved on first use and a changed one is refused; the terminal opens only from the dashboard's own origin, is audited, and closes after 30 minutes idle. Errors reach the page as messages over the socket. An end-to-end test runs a real shell through the edge, tunnel and Bamboo. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1c1f2b1d44
commit
66483d8385
14 files changed
+1012
-5
No files matched your search
@@ -128,6 +128,7 @@ func (d *DB) sealed(v any) any {
|
||||
case Settings:
|
||||
x.SMTP.Pass = b.Seal(x.SMTP.Pass)
|
||||
x.Sandbar.Token = b.Seal(x.Sandbar.Token)
|
||||
x.Terminal.Key = b.Seal(x.Terminal.Key)
|
||||
return x
|
||||
}
|
||||
return v
|
||||
@@ -157,7 +158,7 @@ func (d *DB) unseal(v any) error {
|
||||
case *AlertChannel:
|
||||
return errors.Join(d.open1(&x.Target), d.open1(&x.Token))
|
||||
case *Settings:
|
||||
return errors.Join(d.open1(&x.SMTP.Pass), d.open1(&x.Sandbar.Token))
|
||||
return errors.Join(d.open1(&x.SMTP.Pass), d.open1(&x.Sandbar.Token), d.open1(&x.Terminal.Key))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user