dsh-ssh-remote — 远程工作区,就在手边。
44.6/100
综合分
14
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「dsh-ssh-remote」归属 kkutysllb/dsh-kylin-ssh-tunnel,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CrazyShout/dsh-ssh-remote该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「dsh-ssh-remote」归属 kkutysllb/dsh-kylin-ssh-tunnel,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-ssh-remote @ 0.1.5
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 07:01:55
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 48 处,展示前 48 条)
- 发起网络请求lib/client.js:3696
cache?.request(requested.values()); - 发起网络请求lib/client.js:5646
constructor(sessionId, remote, fetcher = (...args) => fetch(...args)) { - 读取本地文件lib/ssh-config.js:58
if (!existsSync(configPath)) - 读取本地文件lib/ssh-config.js:71
text = readFileSync(absolutePath, 'utf8'); - 读取本地文件lib/ssh-config.js:99
if (!existsSync(configPath)) - 执行外部命令固定命令lib/ssh-config.js:185
execFile('ssh', ['-G', '-F', configPath, alias], { encoding: 'utf8', timeout: 5_000, maxBuffer: 1024 * 1024 }, (error, stdout, stderr) => { - 读取本地文件lib/ssh-config.js:302
return statSync(path).isFile(); - 读取本地文件lib/registry.js:149
configExists: existsSync(configPath), - 执行外部命令来自配置/变量lib/port-forwards.js:108
const worker = entry.worker = this.options.forkWorker?.() ?? fork(fileURLToPath(new URL('./port-forward-entry.js', import.meta.url)), [], { - 读取本地文件lib/updates.js:41
const runningVersion = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version; - 读取本地文件lib/updates.js:79
const manifest = JSON.parse(readFileSync(join(this.owner.profileContext.dir, 'package.json'), 'utf8')); - 读取本地文件lib/ptc-router.js:83
const bytes = readFileSync(path); - 读取本地文件lib/helper/installer.js:36
let content = readFileSync(path); - 读取本地文件lib/helper/installer.js:42
const source = readFileSync(join(dirname(path), `${name}.py`), 'utf8'); - 执行外部命令来自配置/变量lib/helper/installer.js:89
execFile(sshBinary, [ - 读取本地文件lib/anchors.js:9
if (existsSync(absolute)) - 读取本地文件lib/anchors.js:25
if (!existsSync(file)) - 读取本地文件lib/anchors.js:28
const rows = JSON.parse(readFileSync(file, 'utf8')); - 写入本地文件lib/anchors.js:41
mkdirSync(entry.anchorPath, { recursive: true, mode: 0o700 }); - 写入本地文件lib/anchors.js:59
mkdirSync(anchorPath, { recursive: true, mode: 0o700 }); - 读取本地文件lib/migration.js:9
const st = await lstat(file); - 读取本地文件lib/migration.js:12
return await readFile(file, 'utf8'); - 删除本地文件lib/migration.js:94
await unlink(file); - 写入本地文件lib/migration.js:97
await mkdir(dirname(file), { recursive: true, mode: 0o700 }); - 写入本地文件lib/migration.js:110
await rename(tmp, file); - 删除本地文件lib/migration.js:120
await unlink(tmp).catch(error => { if (error.code !== 'ENOENT') - 写入本地文件lib/migration.js:125
await mkdir(this.stateDir, { recursive: true, mode: 0o700 }); - 读取本地文件lib/migration.js:126
const directory = await lstat(this.stateDir); - 写入本地文件lib/migration.js:129
await chmod(this.stateDir, 0o700); - 读取本地文件lib/migration.js:223
const journal = JSON.parse(await readFile(join(this.stateDir, `${id}.json`), 'utf8')); - 写入本地文件lib/port-forward-transport.js:67
await chmod(this.directory, 0o700); - 读取本地文件lib/port-forward-transport.js:91
const info = await lstat(this.socket).catch(() => undefined); - 删除本地文件递归lib/port-forward-transport.js:137
await rm(this.directory, { recursive: true, force: true }); - 执行外部命令来自配置/变量lib/port-forward-transport.js:148
spawn(args) { - 写入本地文件lib/transfer-store.js:61
await mkdir(path, { recursive: true, mode: 0o700 }); - 读取本地文件lib/transfer-store.js:62
const info = await lstat(path); - 写入本地文件lib/transfer-store.js:65
await chmod(path, 0o700); - 读取本地文件lib/transfer-store.js:70
const names = await readdir(this.directory); - 写入本地文件lib/transfer-store.js:93
await rename(temporary, path); - 删除本地文件lib/transfer-store.js:103
await unlink(temporary).catch(() => { }); - 读取本地文件lib/transfer-store.js:107
const folder = await lstat(join(this.directory, transferId(id))); - 读取本地文件lib/transfer-store.js:131
const names = await readdir(this.directory).catch((error) => { if (error.code === 'ENOENT') - 读取本地文件lib/transfer-store.js:183
const directory = join(this.directory, transferId(id)), names = await readdir(directory); - 读取本地文件lib/transfer-store.js:187
const info = await lstat(join(directory, name)); - 删除本地文件lib/transfer-store.js:192
await unlink(join(directory, name)); - 删除本地文件lib/transfer-store.js:193
await rmdir(directory); - 发起网络请求lib/release-catalog.js:86
const response = await this.request(url, { signal, headers: { Accept: 'application/json' }, redirect: 'follow' }); - 执行外部命令固定命令lib/known-hosts.js:118
execFile('ssh-keygen', ['-F', lookup, '-f', file], { encoding: 'utf8', timeout: 5_000, maxBuffer: 1024 * 1024 }, (error, stdout, stderr) => {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-terminal-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-api-workspace-files@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-brand@deepseek-ai/dsh-client-locale给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 浏览远程文件
- 读写远程文件
- 执行远程命令
DeepSeek Harness 的 SSH 远程工作区:浏览、读写远程文件,执行远程命令,带连接状态圆点。
README
由 DeepSeek 最新模型翻译生成dsh-ssh-remote — 远程工作区,就在手边。
English · 下载 0.13.3 · 更新记录 · 排错
远程开发,像在本地一样顺手。
在 DeepSeek Harness 中打开 SSH 工作区,用原生文件面板和终端开发。复用 ~/.ssh/config,支持远程编辑、@ 文件引用、端口转发和文件传输,无需在服务器运行完整 DSH。
安装:复制、安装、连接
已有可用的 DSH 和 SSH 别名?直接从这里开始。Desktop 自带运行时,不必额外安装 Node。
Desktop / Web
1. 打开左侧 插件 → 添加插件,粘贴下面的完整地址。
2. 点击 安装 → 立即启用。首次安装或从 0.11.x 升级后,保存工作并完整重启当前 DSH;日后按更新结果提示操作。
3. 点击 添加工作区,选择 SSH 主机与远端文件夹,即可使用官方 工作区文件 和 新建终端。
~~~text
https://github.com/CrazyShout/dsh-ssh-remote/releases/download/v0.13.3/dsh-ssh-remote-0.13.3.tgz
无需克隆、编译或复制插件目录。安装器仍需联网下载运行依赖。
插件详情中的 开始使用 可随时展开查看连接步骤;界面跟随 DSH 的中文/英文设置,不另设语言开关。
展开完整文档(README 剩余 1 节)
dsh-ssh-remote — 远程工作区,就在手边。 English · 下载 0.13.3 · 更新记录 · 排错 远程开发,像在本地一样顺手。 在 DeepSeek Harness 中打开 SSH 工作区,用原生文件面板和终端开发。复用 ~/.ssh/config,支持远程编辑、@ 文件引用、端口转发和文件传输,无需在服务器运行完整 DSH。 安装:复制、安装、连接 已有可用的 DSH 和 SSH 别名?直接从这里开始。Desktop 自带运行时,不必额外安装 Node。 Desktop / Web 1. 打开左侧 插件 → 添加插件,粘贴下面的完整地址。 2. 点击 安装 → 立即启用。首次安装或从 0.11.x 升级后,保存工作并完整重启当前 DSH;日后按更新结果提示操作。 3. 点击 添加工作区,选择 SSH 主机与远端文件夹,即可使用官方 工作区文件 和 新建终端。 ~~~text https://github.com/CrazyShout/dsh-ssh-remote/releases/download/v0.13.3/dsh-ssh-remote-0.13.3.tgz 无需克隆、编译或复制插件目录。安装器仍需联网下载运行依赖。 插件详情中的 开始使用 可随时展开查看连接步骤;界面跟随 DSH 的中文/英文设置,不另设语言开关。已有 0.12.0 的用户可直接在插件详情检查更新。 请使用完整地址。 npm 上同名的 dsh-ssh-remote 属于其他项目。Desktop 与 Web 使用独立 profile,需分别安装。 CLI / Web:一条安装命令 ~~~sh dsh plugin --profile web add 'https://github.com/CrazyShout/dsh-ssh-remote/releases/download/v0.13.3/dsh-ssh-remote-0.13.3.tgz' 安装后重新启动 dsh web;已有服务先在它的终端按 Ctrl-C。Desktop 请使用应用自己的插件页。 其他安装方式与安装界面 在官方插件页面粘贴固定版本安装地址 固定 Git Tag(需要本机 Git): ~~~sh dsh plugin --profile web add 'github:CrazyShout/dsh-ssh-remote#v0.13.3' 也可下载 Release 的 .tgz,在插件页输入其绝对路径;SHA256SUMS 用于校验下载包。遇到依赖脚本提示时按官方安装器确认,不要全局放开未知脚本。0.11.0 起已移除 ssh2 / cpu-features 原生构建依赖。 打开之后能做什么 实际 Web 界面:SSH 远程工作台 | 日常操作 | 入口 | | 浏览、预览文件 | 官方侧栏 工作区文件 | | 编辑并保存文本 | 文件页签菜单 编辑远程文本,或快速打开中的 编辑 | | 找到并引用代码 | SSH · 主机 → 快速打开,或输入框中的原生 @ | | 运行命令 | 官方侧栏 新建终端 | | 查看目录、命令退出码与上下文 | 终端页签菜单 查看 SSH 终端状态 | | 访问 TensorBoard、Jupyter、开发网页 | 远程工作台 → 端口转发 | | 上传、下载文件或目录 | 远程工作台 → 文件传输 | | 使用远端 skill | 当前远程会话的原生 / 技能菜单 | 顶部 SSH · 主机 打开统一远程工作台;空会话入口在输入框上方。本地会话仍使用原来的文件和终端,不会被接管。 连接圆点:绿=SSH/helper 已连接,黄=连接中或能力受限,灰色空心=未连接或状态未知,红=连接错误。悬停或键盘聚焦可查看完整路径和原因。绿点不代表所有远端功能都已经验证。 第一次使用 SSH? 先按 DSH 官方说明安装 DSH,再准备本机 OpenSSH 别名: ~~~sshconfig Host devbox HostName your-server.example.com User your-user 运行 ssh devbox,首次连接时核对主机指纹,确认能登录后 exit。插件后台使用非交互认证,因此还需确认: ~~~sh ssh -o BatchMode=yes devbox true 随后按上面的三步安装连接,在原生终端运行 pwd 验证远端目录,无需发送模型消息。首次连接会部署匹配的 Python helper;主机诊断位于 设置 → 内置插件 → SSH Remote。自定义 Port、IdentityFile、ProxyJump 仍写在 OpenSSH 配置中,不必在插件里重复填写。 环境与边界 兼容验收覆盖 DSH 0.2.0-rc.2 / 0.2.1-rc.2 / 0.2.1-rc.3;结果以对应 Release 的验收记录为准,不自动切换 DSH 更新通道。 | 用途 | 要求 | | Desktop | 官方 DSH Desktop,自带 Node 和包管理器 | | CLI / Web | Node 22+,dsh 与 pnpm 可用 | | 基础远程连接 | 本机 OpenSSH、可用的非交互认证;远端 Python 3.8+ | | 文件搜索与 @ 补全 | 远端 ripgrep;Git 工作区索引还需要 Git | | 模型受限命令执行 | 远端 Linux 和 bubblewrap;浏览文件、人工终端不要求它 | | 远端 run_code / PTC | 远端 Node 22.13+(须支持 stripTypeScriptTypes);受限权限仍需 bubblewrap。Desktop 自带 Node 不等于远端已有 Node | - 文本编辑:完整 UTF-8 文件,最大 256 KiB;重启前保存草稿。 - 文件传输:单文件、单批上限 1 TiB;小样本实测、容量边界模拟,未测试 TB 级吞吐。重启续传需重新授权源或目标目录。 - 端口转发:目前仅验收 macOS / Linux 本机;Windows 尚无完整 Desktop/SSH 验收。 - 远端技能:默认发现项目及用户的 .dsh/skills、.agents/skills,不跟随符号链接、不自动执行脚本。 - DSH 的 Finder / 本机应用入口仍是本机操作;远端文件使用面板预览和远程编辑。 详细范围见技术参考。从旧 SFTP/插件 host 配置迁移见迁移指南;已有 OpenSSH 别名无需迁移,升级不会自动改写 SSH 配置。 更新、回退与卸载 应用内更新: 打开 插件 → dsh-ssh-remote → 检查更新。发现稳定版后点击 更新到版本号 → 确认更新,无需返回仓库或复制新链接。默认在页面可见时每 6 小时检查一次;可在同页关闭自动检查,手动检查仍可用。提醒只显示一次,不自动安装。 网络检查失败后,页面可见时约 5 分钟自动复查;展开“更新排错建议”可查看失败阶段和脱敏错误码。不会擅自切换代理、关闭证书校验或反复安装。 更新调用 DSH 官方安装服务,保留依赖审批与兼容性检查。安装完成与新版生效会分别显示;若提示需要重启,请先保存草稿、暂停传输。更新重载可能结束 SSH 终端和端口转发;插件不会自动重启 DSH。 断线或响应丢失时选择 重新确认结果,不会自动重复安装。 “检查更新”也会刷新本机安装状态。若旧请求已不在当前 DSH 中,重新核对版本后可点 结束这次提示;它只清理提示,不代表安装已取消。之后如仍需更新,再由你确认发起。安装错误的短说明和日志路径放在详情里,长日志不会塞进浏览器恢复记录。 源码 link: / 本地目录安装只提示版本,使用 Git 同步,不会被安装包覆盖。0.11.2 及更早版本尚无此入口,需要先按上方步骤安装当前版本。也可随时从 Releases 手动选择固定版本;若 DSH 拒绝直接替换某种来源,按官方插件页提示处理,不自动卸载旧版。Web CLI 仍可在同一 profile 再次运行 add。 回退到 0.13.2: 在插件页安装上一正式版本,或使用: ~~~sh dsh plugin --profile web add 'https://github.com/CrazyShout/dsh-ssh-remote/releases/download/v0.13.2/dsh-ssh-remote-0.13.2.tgz' 按提示重启,已迁移的 OpenSSH 配置保留。0.13.0 及更早版本没有本版的控制连接认证修复;回退仅用于隔离排障,不应作为安全等价版本长期使用。 停用 / 卸载: 使用对应应用的插件页。Web 也可停止服务后运行: ~~~sh dsh plugin --profile web remove dsh-ssh-remote 不会删除远端项目、本地会话或 SSH 配置。已有远程工作区需要插件才能访问,重新安装可复用保存的映射。 帮助与开发 排错指南 · 提交 Issue · 技术参考 · 路线图 · 发布流程 · 更新记录 反馈时附上插件 / DSH 版本、Desktop 或 Web、安装来源及第一个实际错误;不要提交凭据。 MIT License.
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
CrazyShout/dsh-ssh-remote
dsh-ssh-remote — 远程工作区,就在手边。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目