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/DELETErequire explicitly enablingJUMPSERVER_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_platformsjms_create_hostjms_update_hostjms_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:
jms_list_assetslist assetsjms_list_accountslist accountsjms_connectconnectjms_exec/jms_sqlexecute commands or queriesjms_disconnectdisconnect
To query a database, use jms_list_assets with category=database.
Default Tools¶
Default tools provided:
jms_whoami— confirm current API userjms_list_assets— list assetsjms_get_asset— view assetjms_list_accounts— list accountsjms_list_nodes— list nodesjms_connect— create connection-token and establish session via KoKojms_exec— execute command on hostjms_sql— execute SQL/Redis/Mongo commands on a ready database sessionjms_read_file— read file via KoKojms_write_file— write file via KoKojms_list_sessions— list sessionsjms_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_ADMINdefaults to off; when enabled, host management requests still go through Core RBAC and do not bypass KoKo.- GitHub installation may require configuring
allowBuildsandminimumReleaseAge; pnpm 11 may reject packages published less than about 24 hours ago. - Do not use Homebrew’s
dshformula; 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.