Introduction

DSH breaks down tool capabilities into plugins. When developing agents, if the local harness needs to operate on the shell, file system, terminal, and LSP on another machine, the common practice is to forward commands one by one to the remote for execution. dsh-ssh is a DeepSeek Harness SSH remote-execution plugin maintained by UynajGI, which uses a single SSH connection to execute Bash, file tools, PTY terminal, and LSP on a remote host.

What is This

dsh-ssh is an SSH remote-execution plugin for DSH. Built on ssh2, it provides remote providers for ctx.subprocess and ctx.fs, allowing the local DSH to retain processes while command execution, file access, and PTY are handled on the remote end. It supports multi-hop ProxyJump chains, SFTP upload/download, and full authentication coverage.

Core Features

The capabilities listed below are derived from verified plugin descriptions:

  • SSH remote-execution plugin for DeepSeek Harness
  • Moves Bash, file tools, PTY terminals, and LSP onto a remote host over a single SSH connection
  • Multi-hop ProxyJump chains
  • SFTP upload/download
  • Full authentication coverage
  • Built on ssh2
  • Remote providers for ctx.subprocess and ctx.fs
  • Web Add-workspace flow with connection sidebar and directory browser
  • ~/.ssh/config host alias resolution and registration
  • Local native folder picker via local.pickNative
  • Connection management and remote directory browsing over the /dsh-ssh RPC channel

Installation and Enabling

Installation command:

npm i dsh-ssh

When enabling, you can first mount the aggregation row in cordis.yml. host, username, and cwd are required; cwd must be an absolute POSIX path.

- id: ssh-remote
  name: dsh-ssh
  config:
    host: server.example.com
    port: 22
    username: root
    privateKey: ~/.ssh/id_ed25519
    cwd: /root/workspace

If the target requires a jump host, you can add a jump array. The first hop in the array starts from the local machine, and the last hop points to the target host.

    jump:
      - host: bastion.example.com

If you need to combine providers separately in the deployment, you can mount subpath rows individually:

- id: ssh
  name: dsh-ssh/ssh

- id: subprocess-ssh
  name: dsh-ssh/subprocess

- id: fs-ssh
  name: dsh-ssh/fs

When strictHostKeyChecking is set to true, knownHosts must be configured.

Web Add-workspace Usage

When enabling the dsh-ssh Add-workspace flow on the web, you need to first disable the dynamic directory picker row and then insert the SSH backend. Here, the name is used as a matching condition, so disabling by id is more appropriate.

- id: directory-picker
  name: '@deepseek-ai/dsh-host-directory-picker-auto'
  disabled: true

- insert:
    - id: ssh-remote
      name: dsh-ssh
      config: { ...same config as the quick start... }

    - id: directory-picker-ssh
      name: dsh-ssh/picker

    - id: ssh-web-channel
      name: dsh-ssh/web

When selecting a remote directory, first call session.route to obtain a local placeholder cwd, then create the session.

const { cwd } = await rpc('session.route', { id: connectionId, path: remotePath })
ctx.sessions.create({ cwd })

Use Cases and Notes

This is suitable for scenarios where the local DSH needs to drive the shell, file tools, PTY terminal, and LSP on a remote host. Verified materials clearly state that the harness does not need to be installed on the remote.

It is recommended to review the source code and MIT license before use. The plugin runs with the permissions of the current dsh process. Before installation, you should confirm whether the credentials, files, and permissions accessible by the local process meet your expectations.

Additionally, remote sessions do not enter the DSH local workspace registry. The fetched README and the end of package.json are truncated, and the subsequent scripts and complete limitations are not fully displayed. Therefore, do not rely on the undisclosed limitation descriptions for a complete security assessment.

Links

  • GitHub: https://github.com/UynajGI/dsh-ssh
  • Directory Page (standalone directory site from plugin clues): https://www.skillhub.cn/plugins/UynajGI/dsh-ssh