thirsty5034/dsh-ssh-tunnel
DSH 社区插件:多主机 SSH 隧道 + SSHManager(更好的侧边栏)
项目介绍Project Overview
dsh-ssh-tunnel 是 DSH 社区插件,为 dsh-better-sidebar 提供多主机 SSH 隧道与 SSHManager:管理主机清单、密钥授权、终端和双栏 SFTP,模型可执行命令与传文件,密钥不暴露给模型。适合按项目安全连接远程主机时使用;它不会把全局 fs/subprocess 替换成单一远程磁盘,连接前需在侧边栏授予项目访问权限。
dsh-ssh-tunnel is a DSH community plugin for dsh-better-sidebar that adds multi-host SSH tunnels and an SSHManager model tool. It manages host inventory, project-scoped grants, interactive terminals, and dual-pane SFTP, while keeping passwords and keys hidden from the model. Use it when a project needs controlled remote command execution or file transfer. It does not replace global fs/subprocess with one remote disk, and hosts must be authorized in the sidebar before connecting.
请帮我了解并安装插件:【dsh-ssh-tunnel】【https://github.com/thirsty5034/dsh-ssh-tunnel】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add "dsh-ssh-tunnel@github:thirsty5034/dsh-ssh-tunnel"
把 thirsty5034/dsh-ssh-tunnel 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-ssh-tunnel
DeepSeek Harness community plugin: multi-host SSH tunnel + SSHManager for dsh-better-sidebar.
- Host inventory + secrets (never exposed to the model)
- Project-scoped authorization (
projectPathKey= workspace cwd) - Model tool
SSHManager(exec, SFTP, session strategies) - Sidebar tab for connect / grants
- Center overlay: interactive terminal (xterm) and dual-pane SFTP
Does not replace global fs / subprocess with a single remote disk.
Companion: dsh-git-forge (Git credentials + push policy).
Credits / prior art
Product shape and several UX patterns are informed by open-source LiveAgent (multi-host SSH inventory, project-scoped access, sidebar tunnel management, center terminal / SFTP surfaces).
This package is a DSH-native implementation (Cordis host/client plugin, dsh-better-sidebar tab, SSHManager tool, DSH-local secret layout). It is not a git fork of LiveAgent and does not vendor LiveAgent sources. Consult LiveAgent under its own license when comparing designs.
Requirements
- DSH web profile with dsh-better-sidebar (≥ 0.12)
- Node.js 18+
- Network access to your SSH targets
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/thirsty5034/dsh-ssh-tunnel/main/scripts/install.sh | bash
Windows (PowerShell):
irm https://raw.githubusercontent.com/thirsty5034/dsh-ssh-tunnel/main/scripts/install.ps1 | iex
Or CLI (GitHub source until npm publish):
export DSH_HOME=${DSH_HOME:-$HOME/.dsh}
dsh plugin --profile web add "dsh-ssh-tunnel@github:thirsty5034/dsh-ssh-tunnel"
dsh --profile web --dump-config | grep ssh-tunnel
Restart DSH web after host-side changes, then hard-refresh the browser.
Options / local link / npm (later)
bash scripts/install.sh --restart
bash scripts/install.sh --from npm 0.3.6
dsh plugin --profile web add "dsh-ssh-tunnel@link:/path/to/dsh-ssh-tunnel"
Discoverability
- GitHub topics:
dsh-plugin,deepseek-harness,dsh(required for dsh.so auto-index) - Install from GitHub (current): see Install above
- Store listings may lag crawlers; source of truth is this repository
Data layout
Under $DSH_HOME/ssh-tunnel/ (mode 0700):
| File | Purpose |
|---|---|
hosts.json |
Non-secret host metadata |
secrets.json |
Passwords / PEM / passphrases (0600) |
grants.json |
projectPathKey → hostIds[] |
known_hosts.json |
Trusted host key fingerprints |
Sidebar
- Hosts — CRUD, OpenSSH scan import
- Project access — which hosts the current project may use (grant before connect; Connect does not auto-authorize)
- Sessions — Connect / disconnect; open Terminal or SFTP
Model tool
SSHManager action=list_hosts
SSHManager action=exec host_id=<id> command="uname -a"
SSHManager action=sftp_list host_id=<id> path=/
Session strategies: reuse_or_create (default), new, require_existing, or explicit session_id.keyboardInteractive hosts are never auto-dialed by the tool; connect in the UI first.
Security
- Tool and list APIs must not return
password/ PEM / passphrase - Local upload/download paths are constrained to the project root and
/workspace - Host keys are stored as SHA256 hex in
known_hosts.json; first connect / rotation prompts in the sidebar (fingerprint shown) - HTTP API is fenced like other DSH local plugins (loopback / trusted hosts)
- Prefer key-based auth; rotate secrets if
secrets.jsonmay have leaked
Internationalization (UI)
- Namespace:
sshTunnel - Dictionaries:
zh/enonctx.locale - Tab title and panel track DSH locale preference live
Host SSHManager strings stay English (model-facing).
Development
npm test
npm run check
./scripts/sync-to-dsh.sh # requires DSH_HOME; keeps local-plugins copy
xterm loading
Prefers a bundled @xterm/xterm when available; otherwise falls back to jsDelivr CDN (needs network / CSP allowlist).
License
MIT — see LICENSE.
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS