dsh-ssh-remote
DeepSeek Harness (DSH) SSH 远程工作插件 — 纯远程模式:多机管理、工作区选择、远程文件读写工具
- Stars
- 0
- Language
- JavaScript
- Created
- Sep 1, 2026
- Updated
- Sep 1, 2026
Introduction
deepseek-harness-ssh
DSH(DeepSeek Harness)的 SSH 远程操作插件:让运行在云服务器上的 DSH 通过 SSH 远程操作另一台电脑 —— 执行命令 / 编译、读写文件、上传下载。
不修改 DSH 主体:这是一个标准 Cordis bundle,通过 ~/.dsh/profiles/<profile> 的插件机制加载(与 lark/qqbot/wecom 等通道插件同级)。
解决什么问题
- DSH 部署在云服务器(有公网 IP,如
203.195.242.184)。 - 被操控的电脑是家用电脑(无公网 IP)。
- 方案一(默认,已优先实现):反向 SSH —— 家用电脑主动连到云服务器,把本机 sshd 反向映射到云服务器的
localhost:2222,DSH 再经localhost:2222免密回连家用电脑。 - 方案二(备选):Tailscale 虚拟局域网 —— 两端都装 Tailscale 后,把插件的
host/port/user指向 Tailscale 分配的 IP 即可,插件无需任何改动。
提供的工具(9 个)
| 工具 | 功能 |
|---|---|
ssh_ping | 测试隧道/连接是否可用,返回远程主机名、用户、系统、内核、负载 |
ssh_exec | 在远程执行命令或多行脚本(编译/构建/安装/服务/git 等),支持 cwd、env、timeout_seconds、shell(bash/powershell),返回 stdout/stderr/退出码 |
ssh_read | 读远程文件,支持 offset_bytes/limit_bytes 切片,二进制自动转 base64 |
ssh_write | 写远程文件(自动建父目录,可选 mode) |
ssh_append | 追加远程文件 |
ssh_list | 列出远程目录(含隐藏项,long 格式) |
ssh_stat | 远程路径元信息(exists/type/size/mtime/mode/owner) |
ssh_upload | 云服务器本地文件 → 远程(上限 20 MB) |
ssh_download | 远程文件 → 云服务器本地(上限 20 MB) |
传输全链路 base64,无 shell 转义问题;所有 ssh 调用使用密钥认证(BatchMode=yes,不会卡在密码交互)。
图形界面配置(Web UI,无需改文件)
重启 DSH 后,打开 Web 界面:
设置 → 插件 → 可配置插件 → 找到 SSH 远程连接 卡片,即可在网页上填写/修改连接参数:
| 字段 | 说明 |
|---|---|
| 主机 host | 反向隧道用 localhost;直连或 Tailscale 填 IP/域名 |
| 端口 port | 反向隧道端口(默认 2222);直连家用电脑通常 22 |
| 远程用户名 user | 家用电脑登录用户名(Windows 是 C:\Users\<名字> 的名字) |
| 私钥 identityFile | 云端私钥路径,默认 ~/.ssh/dsh_cloud_to_home |
| 远程 Shell | bash(Linux/macOS/WSL)或 powershell(Windows) |
| 连接超时 / 主机密钥校验 / known_hosts | 高级选项 |
点 保存 后立即生效(实时应用,无需重启),ssh_* 工具的目标随之更新。
实现说明(与 skillhub 插件同款、经过验证的架构):
- host 端登记 settings 命名空间(
deepseek-harness-ssh),"可配置"页据此分发本插件的卡片; - 卡片读写走插件自己的同源 HTTP 端点
POST /ssh-remote({method:'config', save?}); - 保存值持久化到
~/.dsh/ssh-remote.config.json,叠加在cordis.patch.yml组合值之上; - 工具每次调用读取合并后的活配置,因此保存即生效。
安装(快速)
一条命令,自动完成「拉取源码 → 安装到 profile → 注册 bundle」:
dsh plugin add --profile web https://github.com/hehehe1234567894/dsh-ssh-remote.git
- 装好后重启 DSH 一次,加载主机端工具与系统提示注入;Web 界面部分刷新浏览器即可用
- 以后升级:重新执行同一条命令即可拉取最新版
- 装完后到 设置 → 插件 → SSH 远程连接 卡片里添加你的电脑,或直接在「选择工作区」弹窗里浏览远程目录
profile 的 nodeLinker 需为
hoisted(DSH 默认),插件从 profile 根解析依赖。
部署步骤(云服务器侧,已完成)
- 插件源码:
/home/ubuntu/DSHBuild/ssh-remote/(lib/index.js+lib/runner.js)。 - 已打包安装到
~/.dsh/profiles/web/:- 归档:
~/.local/share/dsh-plugin-archives/deepseek-harness-ssh-1.0.0.tgz ~/.dsh/profiles/web/package.json:dependencies与dsh.profile.bundles均加入deepseek-harness-sshpnpm install已完成(node_modules 已含该包)
- 归档:
- 密钥(已生成在
/home/ubuntu/.ssh/):dsh_home_to_cloud(+.pub):家用电脑登录云服务器用(私钥给家用电脑,公钥已在云端~/.ssh/authorized_keys)dsh_cloud_to_home(+.pub):云服务器回连家用电脑用(私钥留在云端,公钥需放入家用电脑authorized_keys)
- 插件配置(
deepseek-harness-ssh自带cordis.patch.yml,可用环境变量覆盖):- insert: - id: ssh name: deepseek-harness-ssh config: host: localhost port: 2222 # 反向隧道端口 user: !!js process.env.DSH_SSH_USER ?? 'home' # ← 家用电脑用户名 identityFile: !!js process.env.DSH_SSH_IDENTITY ?? '~/.ssh/dsh_cloud_to_home' defaultShell: bash # Windows 家用机可改为 powershell
⚠️ 生效方式:配置改动需在 DSH 下次重启后生效(本次按要求未重启)。重启后本会话工具列表会出现
ssh_*工具。其他用户可把DSH_SSH_USER/DSH_SSH_IDENTITY写入 DSH 的环境或.env覆盖默认值。
家用电脑端配置(拿取 home-setup 包执行)
打包好的材料:/home/ubuntu/DSHBuild/ssh-remote/home-setup-reverse-ssh.tar.gz
(内含 dsh_home_to_cloud 私钥、dsh_cloud_to_home.pub 公钥、两个一键脚本)。
第一步:家用电脑开启 sshd
- Ubuntu/Debian:
sudo apt install openssh-server && sudo systemctl enable --now ssh - Windows 10/11(管理员 PowerShell):
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd ; Set-Service -Name sshd -StartupType Automatic - macOS:系统设置 → 通用 → 共享 → 远程登录。
第二步:解压并运行脚本
tar -xzf home-setup-reverse-ssh.tar.gz && cd home-setup
./setup-reverse-tunnel.sh
# 可自定义:CLOUD_IP=1.2.3.4 CLOUD_USER=ubuntu ./setup-reverse-tunnel.sh
Windows(普通 PowerShell,在解压目录):
.\setup-reverse-tunnel.ps1
脚本会自动:安装私钥 → 把云端公钥追加到本机 authorized_keys → 验证免密 → 后台启动反向隧道(断线自动重连)。建议再按脚本末尾提示配置开机自启(systemd / 计划任务)。
第三步:验证
# 云服务器上(隧道建立后):
ssh -p 2222 <家用电脑用户名>@localhost -i ~/.ssh/dsh_cloud_to_home 'echo OK && hostname'
记住:user 是家用电脑的用户名(Windows 上是 C:\Users\<名字> 的那个名字;Linux 是 whoami)。隧道一旦建立,DSH 即可用 ssh_ping / ssh_exec 等工具远程操作该电脑。
常见问题
ssh_ping返回connection refused:隧道未建立。检查家用电脑脚本是否在跑、云服务器ss -tlnp | grep 2222是否有监听。permission denied:云端~/.ssh/dsh_cloud_to_home私钥与家用电脑authorized_keys中的公钥不匹配,或~/.ssh/私钥权限不对(私钥 600、~/.ssh700)。- Windows 上命令不生效:把插件配置
defaultShell改为powershell,或在ssh_exec里传shell: "powershell"。 - 隧道经常断:确认家用端使用了
ServerAliveInterval=30(脚本已内置),并配置了开机自启。 - 云服务器防火墙:家用电脑是出站连接云服务器 22 端口,因此只需云服务器 22 端口公网可达(腾讯云安全组放行 22)。
反向 SSH 失败时的备选方案(Tailscale)
- 家用电脑和云服务器都安装 Tailscale 并登录同一账号(
tailscale up)。 - 云服务器上
tailscale status查看家用电脑的 100.x.x.x IP。 - 把插件配置改为
host: <家用电脑的Tailscale IP> port: 22(其余不变),重启 DSH 生效。
本地自测
cd /home/ubuntu/DSHBuild/ssh-remote && node scripts/selftest.js
自测通过 localhost:22 直连本机,验证全部 9 个工具(含中文内容、二进制往返、字节切片、缺失文件、退出码传播)。