Introduction¶
DSH’s plugin mechanism allows client capabilities to be installed on demand. For agent workflows requiring files, shell, and terminal operations on remote machines, a common issue arises: remote Host configurations are scattered in OpenSSH, and authentication, proxy, and key strategies are not desired to be copied into the plugin, while DSH native tools need a stable remote execution boundary. dsh-ssh-remote is a DeepSeek Harness plugin prepared for this scenario. It is maintained by CrazyShout, positioned as a Codex-style SSH remote workspace: discovering specific Hosts from local OpenSSH configuration, selecting remote directories through the standard “Add Workspace”, and routing DSH native file, shell, and terminal operations to the remote versioned helper.
What is this¶
dsh-ssh-remote is a DSH plugin. It delegates the connection fact of the remote workspace to the local OpenSSH, while the plugin side handles files, shell, terminal, and status display. The license is MIT, and the GitHub repository is https://github.com/CrazyShout/dsh-ssh-remote.
Core Features¶
The following lists capabilities by category.
- Discover specific Hosts from local OpenSSH configuration and preserve the original Host alias.
- Select remote directories using the standard “Add Workspace”.
- Route DSH native file, shell, and terminal operations to the remote versioned helper.
- Automatically install and verify the versioned helper without using
sudo,curl | sh,postinstall, or remote package managers. - Remote file read/write uses stable tokens, temporary inodes,
fsync, version verification, and atomic publishing. - Remote shell and real remote PTY support bounded output and reconnection to continue reading.
- On Linux,
read-only/workspace-writeprocesses and PTY use bubblewrap isolation. - The settings page displays statuses such as installing, connecting, connected, capabilities restricted, reconnecting, errors, etc.
- Old DSH host settings can still use hardened ssh2/SFTP compatible paths.
Environment Requirements¶
Before installation and enabling, confirm the following conditions:
- Local Node.js version 22 or higher.
- DSH
0.1.1-rc.2or a compatible update from0.1.x. - A specific Host alias exists in
~/.ssh/config, and batch connections viassh <alias>are available. - The remote is a POSIX system providing Python 3.9 or higher.
- On Linux, if enabling
read-only/workspace-writeprocess and PTY isolation, bubblewrap (bwrap) is required.
The helper connection strictly uses BatchMode=yes. Web backend connections cannot answer interactive passwords, PINs, passphrases, or MFA prompts.
Installation and Enablement¶
Install from GitHub:
dsh plugin --profile web add 'github:CrazyShout/dsh-ssh-remote'
After installation, restart dsh web. Open “Settings → SSH Remote” to connect first, or select the host directly in “Add Workspace”. The first connection will automatically install the matching version of the helper.
Typical Usage¶
-
Write User, Port, proxy, and authentication information in the OpenSSH configuration; do not encode them as
ssh://user@host:port. Keep a specific Host alias, for examplessh devboxwhich you can already execute locally. -
Run once before using in the Web:
ssh devbox
Verify the new host fingerprint according to your OpenSSH policy.
-
Select that Host and remote directory in DSH’s “Add Workspace”.
-
Use DSH’s file, shell, and terminal capabilities; the settings page will display the current connection and capability status.
Applicable Scenarios and Notes¶
Suitable for teams or individuals who already maintain remote Hosts, keys, certificates, agents, or proxy policies in OpenSSH and wish to execute DSH’s file, shell, and terminal operations remotely.
Note that:
- The plugin runs with the current
dshprocess permissions. Before installation, check the source code and license and confirm that the MIT license meets your usage requirements. - The plugin will not modify
~/.ssh/config, private keys, orknown_hosts. - DSH upstream limitation: Harness Workspace must be a real local directory; the plugin will create a very small local anchor.
- DSH upstream limitation:
SubprocessRuntime.spawn()is a synchronous interface and must return the local PID immediately. - DSH upstream limitation: The current terminal tool does not have a resize verb.
- DSH upstream limitation: DSH history, configuration, plugins, and agent loop still run locally.
- DSH upstream limitation:
listDir()has no pagination contract yet; directories with more than 1000 items will fail honestly. - Any uncooperative external writer may still get stuck in the extremely short window between the last check and the rename; the capability reports
externalWriterRaceFree: false.
Short Conclusion¶
The value of dsh-ssh-remote lies in allowing DSH’s remote workspace to continue using the local OpenSSH Host configuration and delegating remote file, shell, and terminal operations to the versioned helper. The verifiable repository address is:
https://github.com/CrazyShout/dsh-ssh-remote
The directory page URL did not appear in verified materials, so this article does not provide unconfirmed addresses.