中文EN

dsh-remote-console

remote已测通过npmMIT

DSH 右侧栏的 SSH 远程终端:你和 agent 共用一个 PTY,16 个 agent 工具,传输上限可调,终端按会话隔离,配置页支持一键热更新。

下载量 / Downloads
4,476
依赖体积 / node_modules
13.33 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-remote-console

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-remote-console

DSH SSH 插件 · 右侧栏 SSH 远程终端 · 人和 agent 共用一个 PTY · 为 DeepSeek Harness(DSH)做的

中文 | English

你 ssh 上去、输完密码,agent 只能在旁边等着——它看不见你的终端。这个插件把 agent 放进你正在看的那个终端:它敲的命令你看得见,你随时能接手,双方的操作都落在同一条日志里。

DSH 右侧栏的 SSH 远程终端,人和 agent 共用一个 PTY。 不重新实现终端(渲染、输入、窗口都复用 DSH 自带),不改 DSH 源码,不碰、不存你的密码。

30 秒上手

# CLI 管理的 profile(例如 web)
dsh plugin --profile web add dsh-remote-console
# 再把 "dsh-remote-console" 加进该 profile 的 dsh.profile.bundles,重启 DSH
  • 插件市场一键装:发现 → 添加索引源 粘贴 https://cccodder.github.io/dsh-remote-console/market/index.json
  • Electron 桌面版:App 内「插件管理器」搜 dsh-remote-console(或粘贴 github:cccodder/dsh-remote-console)
  • 0.10.4 起:配置页自带「检查更新 / 更新到 vX.Y.Z」,走 DSH 插件管理器热应用,不用重启

装好后:右侧栏「SSH 远程」→ 选主机 → 你自己输密码 → 让 agent 在同一个终端里干活。

它不是什么

你可能想要的 · 本插件的答案

远程开发环境(文件树、工作区镜像、VS Code Remote 那套) · 不是。给你一个真实的远端终端;大文件走 remote_upload / remote_download

让 agent 背着你在后台连一台机器跑命令 · 不是。它就在你盯着的终端里跑,看得见、可接手、有审计

自己能渲染终端的新终端 · 不是。xterm 渲染、输入、窗口全部复用 DSH 自带终端

打了 DSH 补丁才能用 · 不是。只包装公开的终端服务,DSH 升级不用重新打补丁

能力一览

agent 工具 · 16 个:终端 6 · 文件 4 · 端口转发 1 · 审计 2 · 主机列表 3

文件传输 · 流式传输 + 双侧 sha256;单文件默认 256 MB,设置页可调到 2048 MB

终端 · 复用 DSH 原生终端,人机共用 PTY;退出码由 shell 钩子(OSC)回传,不靠猜提示符

审计 · 跨会话 JSONL:命令、退出码、审批结果、传输路径 + sha256、转发;写入前脱敏

依赖 · 运行时 0 依赖;不改 DSH;Node ≥ 20

测试 · 197 个测试,含真实 sshd 的 CI;npm 发布带 provenance

11 秒看完全程:选主机 → 输密码 → agent 在同一个终端里跑 date && uname -a → 人接手 cd /tmp → agent 跑 pwd 仍是 /tmp(同一个 PTY)。示例主机 demo-vm.example.com 是测试用的假 sshd。

如果这个插件帮你少切了几次窗口,给个 ⭐ Star 支持一下——这能让更多在 DSH 里连远程的人找到它。

侧栏「SSH 远程」面板:点主机直接进 ssh 输密码,或「新建会话」输入 user@ip。示例主机 demo-vm.example.com 是本地起的测试 sshd(example.com 是文档保留域名,不是真实机器)。

agent 在你正在看的终端里执行命令:左边是聊天里 agent 的 remote_run,右边是同一个 PTY 里的输出;pwd 两边都是 /tmp,说明人和 agent 用的是同一个 shell。示例同样是 demo-vm.example.com 测试机。

目录

[它解决什么](#它解决什么) · [安装](#安装) · [用法](#用法) · [管理主机列表](#管理主机列表) · [更新](#更新) · [安全模型](#安全模型) · [环境变量](#环境变量) · [故障排查](#故障排查) · [兼容性与限制](#兼容性与限制) · [Windows](#windows实验性) · [性能基线](#性能基线loopback) · [开发与测试](#开发与测试) · [数据目录](#数据目录) · [许可](#许可)

它解决什么

普通的「agent 远程执行」通常是另开一条 ssh 通道,于是:

  • 你看不到 agent 在远端敲了什么,也接不回它的会话;
  • 密码、sudo、主机指纹这些必须由人完成的交互没有地方做;
  • cd/export 这类 shell 状态在两次调用之间丢失。

这个插件把 agent 放进你正在看的那个终端:agent 的命令像人打字一样出现在窗口里,

退出码由 shell 自己的 PROMPT_COMMAND 钩子(OSC 序列)回报,而不是靠猜提示符。

安装

要求:DSH >= 0.2.1-rc.2 <0.3.0-0,本机有系统 ssh 客户端。

版本、平台与能力的完整矩阵(含未验证项、Windows 说明、pnpm 11 安装注意事项)见

docs/compat.md。

npm 包名:dsh-remote-console(https://www.npmjs.com/package/dsh-remote-console)。

插件市场(推荐,能显示「有新版本」):插件市场索引(DSH plugin market format 1):

https://cccodder.github.io/dsh-remote-console/market/index.json
这是 GitHub Pages 镜像,每次推送后自动更新(首次启用约需 1 分钟)。如果它不通,
可改用 jsDelivr https://cdn.jsdelivr.net/gh/cccodder/dsh-remote-console@main/market/index.json
(分支缓存最长约 12 小时)或 GitHub 原链
https://raw.githubusercontent.com/cccodder/dsh-remote-console/main/market/index.json;
也可以把仓库里的 market/index.json 放到你自己的静态服务器上(索引就是一份 JSON)。

1. 侧栏「发现」(需要启用实验性 bundle @deepseek-ai/dsh-experimental-plugin-market-bundle)。

2. 「添加索引源」→ 粘贴上面的 URL。

3. 在列表里点安装;以后有新版本会显示「有新版本」,直接更新。

CLI 管理的 profile(例如 web):

# 1. 装进 profile(--profile 换成你自己的 profile 名)
dsh plugin --profile web add dsh-remote-console

# 2. 把插件加进该 profile 的 bundle 列表
#    编辑 $DSH_HOME/profiles/web/package.json:
#      "dsh": { "profile": { "bundles": [ ..., "dsh-remote-console" ] } }

# 3. 确认插件层被组合进来(应看到 id: dsh-remote-console)
dsh --profile web --dump-config | grep -A2 dsh-remote-console

Electron 桌面版:desktop profile 由 App 独占管理,CLI 会直接拒绝

(profile "desktop" is managed exclusively by the Electron application)。

请用 App 内置的插件管理器安装:包名填 dsh-remote-console(从 npm 装),

或粘贴 github:cccodder/dsh-remote-console(从 git 装最新提交)。

它会自动写入 profile 的 dependencies 与 dsh.profile.bundles。注意全局 dsh CLI

版本可能低于 App 自带的 DSH,以 App 内的版本为准。

不需要 Python、不需要改 ~/.ssh/config、不改 shell rc。安装或使用中报错,先看下面的

[故障排查](#故障排查)。

用法

1. 右侧栏 →「SSH 远程」卡片 → 选中一个远端(来自 ~/.ssh/config 的 Host,或手动新建)。

2. 终端里执行 ssh -M -S <sock> -t <host>,密码/口令由 ssh 自己提示,插件不接触。

3. 登录成功后 agent 可用这些工具:

工具 · 作用

remote_status · 终端、主机、socket、状态、最后几行屏幕

remote_run(command) · 写进同一个 PTY(窗口里可见),返回输出 + 真实退出码(PTY 会把 stderr 并进输出)

remote_exec(command, cwd?) · 复用 ControlMaster socket 的带外执行:原生 stdout/stderr/退出码,不污染终端窗口

remote_upload(local_path, remote_path, overwrite?) · 本地 → 远端:流式传输并双向校验 sha256,默认不覆盖,单文件上限默认 256 MB(设置页可改 1–2048 MB)

remote_download(remote_path, local_path, overwrite?) · 远端 → 本地:流式传输并校验 sha256,默认不覆盖本地文件,上限同上

remote_read_file(path, max_bytes?) · 读远端文本(默认 128 KB、上限 256 KB);二进制文件拒绝显示,提示改用 remote_download

remote_write_file(path, content, append?) · 写 ≤256 KB 的 UTF-8 文本;内容走 stdin,不进终端窗口

remote_forward(action, remote_port?, ...) · start/stop/list 管理端口转发:ssh -N -L 127.0.0.1:...,只绑回环

remote_screen(lines) · 当前屏幕纯文本(剥 ANSI)

remote_log(cursor) · 统一 JSONL 日志的增量读:人敲的命令、agent 的命令、两边输出

remote_audit_read(cursor?, tool?) · 读跨会话保留的审计日志:agent 执行过的命令/退出码、审批、传输、转发、连接起止(不含屏幕内容)

remote_audit_export(local_path, format?)

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:22,最后更新 2026-10-31

链接

GitHub · Homepage · npm

同类插件