跳到主内容

dsh-ssh 使用指南

为 dsh Web GUI 增加完整 SSH 运维能力:主机管理、持久连接池、命令执行、Web 终端、SFTP 文件传输、本地端口转发、集群并发执行,以及 6 个共享主机配置的 Agent 工具。

本文为派生内容(基于 wiki / faq / compatibility_json 自动组装),非 AI 即时创作。

本文由本站基于该插件已收录的字段自动派生(wiki / faq / compatibility_json / readme),非 AI 即时创作。每节末尾标源字段。

快速上手

dsh-ssh

— 源: plugin_wiki.wiki_content

安装与验证

dsh plugin --profile web add @linxin666/dsh-ssh

复制以上命令在 DSH Web Profile 内运行。安装完成后在「插件列表」启用即可。

— 源: plugins.install

关键要点

  • 可靠 Windows 启动:移除 PowerShell 5.1 -WindowStyle Hidden 与 Electron Node 模式的冲突,隐藏窗口仍由 spawn 的 windowsHide 处理;空旧补丁、状态订阅竞态和 IPC 错误不会再把启动页永久留在 8%。
  • 验证过的 Runtime 组合:内置 @deepseek-ai/dsh 0.1.0-rc.7、dshmarket 1.15.0、Web UI 聚合 0.2.3、兼容 rc.7 的 Codex Connect 与 dsh-live-stats 0.1.20,Stable 继续精确锁定而非追随 latest。
  • 托盘与后台自动化需显式选择:默认关闭仍会退出。选择“最小化到托盘并启用后台自动化”后,关闭主窗口才保留 Runtime 和到期任务;显式退出、更新、安全模式和崩溃路径一律完整停止。
  • Host 持久任务调度:Task Board 保存时区、cron 槽位、租约、misfire/running 策略和确定性运行键;启用后台自动化时通过真实 DSH Session 执行并回写 Task Run,Host 不可用时仍回退浏览器调度。
  • 可审计的扩展边界:扩展坞校验 dsh.compatibility 的版本、Desktop API、能力、Surface 与运行时证据,并在 profile 写入 desktop-plugins.lock.json。browser-safe SDK 不导入 Electron 或私有 DSH 模块;预览的外部打开仅传工作区根和相对路径,Host 验证后才交给系统。

— 源: plugin_wiki.readme_zh (fallback readme_raw)

常见问题

在局域网里别人能访问我的 SSH 控制台吗?

不能。所有 /api/dsh-ssh/ 路由都做了 loopback 校验(socket 必须是 127/8 或 ::1,再加同源 Host/Origin 头校验),LAN 邻居直接访问会被拒绝;本地端口转发隧道也只监听 127.0.0.1,不会暴露到外网。校验逻辑在 packages/dsh-ssh/src/routes.ts:43-63。

密码是怎么保存的?会被别人看到吗?

以明文存于 ~/.dsh/dsh-ssh.json(文件权限 0600、目录 0700,原子写入),与 ssh-skill 在 ssh-config 注释里写密码同一信任模型。不主动加密,原因是加密反而引入新密钥管理负担;用户应保证本机账户安全。存储逻辑在 packages/dsh-ssh/src/store.ts:18-20。

Agent 会不会跑去我没配置的主机上执行命令?

不会。Agent 只能操作 GUI 已配置或从 ~/.ssh/config 导入的主机别名;别名未配置时工具调用直接报错,不会臆造主机。约定在 packages/dsh-ssh/src/index.ts:58(系统提示词的限制段)。

远程命令超时或者命令输出很大怎么办?

exec 默认超时 60 秒(可覆盖),超时后会向远端 stream 发送 KILL 并强制收尾;单次 stdout/stderr 累计超过 2MB 会自动截断并标记 “[output truncated]”,避免一条命令挤出几 GB 把进程撑爆。常量在 packages/dsh-ssh/src/engine/connection-pool.ts:30-38。

上传文件到远程为什么一定要绝对路径?

远程 mkdir 链与 fastPut 必须基于同一份路径解析,否则不同实现可能把目录建到根目录。相对路径会在上传入口直接抛 “remotePath must be an absolute path” 错误。代码在 packages/dsh-ssh/src/engine/sftp.ts:37-41。

能象 IDE 那样多个标签页一起 SSH 吗?断线会怎样?

持久连接池为每台主机维护一条长连接,30 分钟空闲自动断开;中途断线会在 exec 通道上自动重连(最多 3 次)。注意:自动重连对非幂等命令会重放,长任务(如部署、数据库迁移)使用前请确认幂等性。实现见 packages/dsh-ssh/src/engine/connection-pool.ts:222-244。

跳板机和集群执行怎么用?

主机配置里填 proxyJump 数组(每一跳必须是本插件已配置的主机别名),引擎会按顺序 forwardOut 链式连接;集群执行则在“集群”标签或 ssh_cluster 工具里按 alias/环境/标签过滤(标签用 ALL 语义全匹配),默认并发 8 可调整。代码在 packages/dsh-ssh/src/engine/connection-pool.ts:135-169 与 packages/dsh-ssh/src/engine/cluster.ts:19-50。

卸载插件会清掉我配置的主机吗?

不会自动删除。~/.dsh/dsh-ssh.json 是用户数据文件,插件装卸只影响引擎、路由、Agent 工具的挂载与注销;想清干净需手动删除或重命名该文件。

— 源: plugin_wiki.faq_json

兼容性

  • DSH: 未声明(package.json 无 dsh.engines;通过 devDependencies 锁到 @deepseek-ai/dsh-* ^0.1.0-rc.7:cordis / host-webserver / client-runtime / client-connection / client-locale / client-ui-settings / client-ui-slots / tools / llm / settings / system-prompt)
  • Node: ^22.19.0 || >=24.0.0(packages/dsh-ssh/package.json:7-9)

— 源: plugin_wiki.compatibility_json

踩坑提醒

安装前请审阅上游仓库;本指南基于已收录字段自动派生,可能滞后于最新版本。如发现与官方文档冲突,请以上游为准。

— 来源:通用规则