SSH 远程工作区
SSH remote workspaces for DeepSeek Harness: let the agent connect to remote hosts over SSH, browse/read/write remote files, run remote commands, open remote terminals, and show connection status with colored dots in the sidebar — in the spirit of Codex Remote.
이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.
업스트림에서 중국어 README를 제공하지 않아 저장소 원본 내용을 표시합니다.
dsh-ssh-remote
English | 中文
SSH remote workspaces for DeepSeek Harness: let the agent connect to remote hosts over SSH, browse/read/write remote files, run remote commands, open remote terminals, and show connection status with colored dots in the sidebar — in the spirit of Codex Remote.
Status: the Web UI, SSH directory picker, persisted remote workspaces, transparent SFTP filesystem routing, and OpenSSH command/terminal routing are implemented end to end.
Features
- SSH connection management:
ssh2connection pool (one per host), keepalive, exponential-backoff auto-reconnect, connection state machine. - Remote file operations: SFTP implementation of the
FileSystemtwelve primitives (read/write/edit/list/stat) with DSHFS_*error-code alignment. - Remote commands:
ssh_remote execruns a shell command on the host. - Codex-style SSH discovery: concrete Host aliases are collected from
~/.ssh/config(includingIncludefiles), then effective HostName/User/ Port/IdentityFile/ProxyJump/ProxyCommand values are resolved withssh -G. - OpenSSH-owned configuration: the Web panel is read-only and never
duplicates SSH credentials into DSH settings. Edit
~/.ssh/config, then press Refresh. - Native Add Workspace flow: choose an SSH alias, browse its directories, and open one as a normal Harness workspace.
- Transparent workspace routing:
read/write/editand other filesystem calls use SFTP;bashand terminal processes use the system OpenSSH client. Local workspaces keep using the original local providers. - Connection status dots: green = connected, amber = connecting/ reconnecting, red = disconnected/error.
- Multiple hosts: workspace records persist to
$DSH_HOME/ssh-remote-workspaces.json.
Install
Requires Node 22+, pnpm, DSH 0.1.0-rc.x.
# Option A: npm (once published)
dsh plugin --profile web add dsh-ssh-remote
# Option B: GitHub (no publish needed)
dsh plugin --profile web add 'github:CrazyShout/dsh-ssh-remote'
Restart dsh web afterwards.
Usage
In the Web UI:
- Click Add Workspace.
- Choose an SSH alias discovered from
~/.ssh/config. - Browse to a remote directory and click Open this folder.
- Start a session in the resulting workspace. Use Full access so the local OpenSSH process can reach the remote host.
Harness still stores a local workspace path. The plugin creates a small local
anchor under $DSH_HOME/ssh-workspace-anchors/ and persists its exact mapping
in $DSH_HOME/ssh-workspace-anchors.json. Only that anchor and its descendants
are routed to the corresponding ssh://alias/path; unrelated local paths are
never intercepted.
The lower-level ssh_remote tool remains available for explicit operations:
The agent drives remote hosts through the ssh_remote tool:
ssh_remote { action: "add", uri: "ssh://user@gpu-server:22/home/user/exp" }
ssh_remote { action: "connect", id: "<id>" }
ssh_remote { action: "exec", id: "<id>", command: "nvidia-smi" }
ssh_remote { action: "read", id: "<id>", path: "train.py" }
ssh_remote { action: "write", id: "<id>", path: "notes.txt", content: "..." }
ssh_remote { action: "list" }
path accepts a remote absolute path (/home/user/exp/a.py) or a
workspace-relative path (a.py).
Authentication
- Prefers the local ssh-agent (
SSH_AUTH_SOCK). - Tries effective
IdentityFileentries returned by OpenSSH in order. ProxyJump(including multiple hops) andProxyCommandstreams are opened by the system OpenSSH client, keeping its Include/wildcard/Match semantics.- The remote must enable the
sftpsubsystem (Subsystem sftp internal-sftp).
SSH configuration
Add a concrete alias to ~/.ssh/config, verify ssh devbox, then refresh the
SSH Remote plugin panel:
Host devbox
HostName devbox.example.com
User you
IdentityFile ~/.ssh/id_ed25519
ProxyJump bastion
Register a workspace with the alias, not duplicated connection fields:
ssh_remote { action: "add", uri: "ssh://devbox/home/you/project" }
Older ssh-remote.hosts entries remain a read-only compatibility fallback,
but new configuration should live only in OpenSSH config.
Routing and security boundary
- File traffic is handled by SFTP; commands and terminals are launched through
the system
sshexecutable, so SSH aliases,Include,Match,ProxyJump, agent forwarding, and host-key policy stay owned by OpenSSH. - Routing is exact and boundary-aware: an anchor
/a/projectmatches itself and/a/project/..., but never/a/project-copy. - Creating a workspace does not copy or mount the remote tree locally. The local anchor contains no remote source files.
Roadmap
- DSH Credentials integration and configurable remote-path read policies.
Development
pnpm install
pnpm run build # tsc for host + client
pnpm test
lib/ is committed to git so a git install never ships without built code.
License
MIT
보안 및 설치 증거
이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.
공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.
저장소가 MIT 라이선스를 선언했습니다.
최근 180일 내 코드 업데이트가 있습니다.
재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.
검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.