Introduction

In DeepSeek Harness (DSH), if an agent needs to connect to production or test assets, the common practice is to SSH directly to the asset IP. This is simple, but it is difficult to keep command filtering, ACLs, and session audits unified on the JumpServer side.

jumpserver-dsh solves this problem: it allows the agent to manage assets through JumpServer and execute commands or read/write files on the assets via the KoKo bastion. Traffic does not connect directly to the asset IP, and JumpServer’s command filtering, ACLs, and session audits still take effect.

What is it

jumpserver-dsh is a DeepSeek Harness plugin with the package name @jumpserver-east/jumpserver-dsh and the repository located at jumpserver-east/jumpserver-dsh.

It wraps JumpServer’s assets, accounts, connections, command execution, and database operations into jms_* tools for the DSH agent to call. Current capabilities mainly target SSH/SFTP hosts and databases via KoKo (MySQL, MariaDB, PostgreSQL, Redis, MongoDB, Oracle, SQL Server, etc.).

RDP / graphical protocols are out of scope.

Core Features

  • Allows the agent to manage assets through JumpServer and execute commands / read/write files on assets via KoKo.
  • Supports SSH/SFTP hosts and databases via KoKo.
  • Traffic does not connect directly to the asset IP; command filtering, ACLs, and session audits still take effect.
  • Default tools include connection, execution, SQL, file read/write, session management, etc.
  • When JUMPSERVER_ENABLE_ASSET_ADMIN=true, additional tools for creating/updating/deleting host assets are provided; requests still go through Core RBAC and do not bypass KoKo.
  • Without authorization, database sessions can only query; write operations like INSERT/UPDATE/DELETE require explicitly enabling JUMPSERVER_ENABLE_DB_WRITE.

Installation & Enabling

Installation

Install from npm:

dsh plugin --profile web add @jumpserver-east/jumpserver-dsh

If pnpm 11 rejects a package that has been published less than about 24 hours ago, you may need to wait for the publish age to meet requirements, or configure minimumReleaseAge according to the repository instructions. GitHub installation scenarios may also involve allowBuilds configuration.

Do not use Homebrew’s dsh formula; that is another Unix tool.

Configuration

Create a new .env under $DSH_HOME. The default dsh home directory is:

  • macOS / Linux: ~/.dsh
  • Windows: %USERPROFILE%\.dsh

Example:

JUMPSERVER_URL=https://jms.example.com
JUMPSERVER_ORG_ID=00000000-0000-0000-0000-000000000002
JUMPSERVER_ACCESS_KEY_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
JUMPSERVER_ACCESS_KEY_SECRET=********************************
JUMPSERVER_ENABLE_ASSET_ADMIN=false
JUMPSERVER_ENABLE_DB_WRITE=false

If JUMPSERVER_ORG_ID is not specified, the Default organization of JumpServer is used.

JUMPSERVER_ENABLE_ASSET_ADMIN defaults to false, allowing only listing and connecting to assets that the Access Key already has permission for. Setting it to true registers additional tools:

  • jms_list_platforms
  • jms_create_host
  • jms_update_host
  • jms_delete_host

These requests still go through Core RBAC and do not bypass KoKo. Keep it false when you do not have host management permissions.

JUMPSERVER_ENABLE_DB_WRITE defaults to false, allowing only query operations in database sessions. Set it to true to allow write statements like INSERT/UPDATE/DELETE. JumpServer’s own command filtering still takes effect. Keep it false when you do not have database write authorization.

The machine running dsh must be able to connect to JumpServer Core (HTTPS) and KoKo SSH. The address and port of KoKo will be automatically pulled from the connection-token.

Startup

After writing the .env, restart the web profile:

dsh --profile web

Typical Usage

You can use natural language in the conversation; there is no need to write tool names. For example:

查看我当前 JumpServer 可连接的资产有哪些

Or:

先确认 JumpServer 登录,再列出我能连的资产;连上 xxx 执行 hostname,然后断开。

The agent will call jms_* tools as needed. Do not let the agent SSH directly to the asset IP.

Typical sequence:

  1. jms_list_assets list assets
  2. jms_list_accounts list accounts
  3. jms_connect connect
  4. jms_exec / jms_sql execute commands or queries
  5. jms_disconnect disconnect

To query a database, use jms_list_assets with category=database.

Default Tools

Default tools provided:

  • jms_whoami — confirm current API user
  • jms_list_assets — list assets
  • jms_get_asset — view asset
  • jms_list_accounts — list accounts
  • jms_list_nodes — list nodes
  • jms_connect — create connection-token and establish session via KoKo
  • jms_exec — execute command on host
  • jms_sql — execute SQL/Redis/Mongo commands on a ready database session
  • jms_read_file — read file via KoKo
  • jms_write_file — write file via KoKo
  • jms_list_sessions — list sessions
  • jms_disconnect — disconnect session

jms_exec is for host commands; do not use it to run database SQL. jms_sql is for database sessions. jms_read_file/jms_write_file are only for host sessions and use KoKo for SFTP.

Compatibility & Notes

  • Core and KoKo must be of the same release version.
  • Supports JumpServer v3.10 LTS (v3.10.0 ~ current v3.10.22), v4.10 LTS (v4.10.0 ~ current v4.10.18).
  • Supports DeepSeek Harness >= 0.1.0-rc.6; documentation marked as developer preview, interfaces may change.
  • RDP / graphical protocols are out of scope.
  • Without authorization, database sessions can only query; write operations require explicitly enabling JUMPSERVER_ENABLE_DB_WRITE.
  • JUMPSERVER_ENABLE_ASSET_ADMIN defaults to off; when enabled, host management requests still go through Core RBAC and do not bypass KoKo.
  • GitHub installation may require configuring allowBuilds and minimumReleaseAge; pnpm 11 may reject packages published less than about 24 hours ago.
  • Do not use Homebrew’s dsh formula; that is another Unix tool.
  • The plugin runs with the current dsh process permissions. It is recommended to check source code, dependencies, and network credentials before installation; license is MIT.

Conclusion

The value of jumpserver-dsh lies in: it pulls the agent’s access path to assets into the existing control chain of JumpServer/KoKo, retaining command filtering, ACLs, and session audits.

Repository: jumpserver-east/jumpserver-dsh. If you are using the DSH plugin directory, you can search by package name @jumpserver-east/jumpserver-dsh.