ssh-licco 2.2.0__tar.gz → 2.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. {ssh_licco-2.2.0/ssh_licco.egg-info → ssh_licco-2.2.1}/PKG-INFO +9 -8
  2. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/README.md +8 -7
  3. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/pyproject.toml +1 -1
  4. {ssh_licco-2.2.0 → ssh_licco-2.2.1/ssh_licco.egg-info}/PKG-INFO +9 -8
  5. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/__init__.py +2 -2
  6. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/LICENSE +0 -0
  7. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/setup.cfg +0 -0
  8. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_licco.egg-info/SOURCES.txt +0 -0
  9. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_licco.egg-info/dependency_links.txt +0 -0
  10. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_licco.egg-info/entry_points.txt +0 -0
  11. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_licco.egg-info/requires.txt +0 -0
  12. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_licco.egg-info/top_level.txt +0 -0
  13. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/__main__.py +0 -0
  14. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/approval.py +0 -0
  15. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/audit_logger.py +0 -0
  16. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/batch_executor.py +0 -0
  17. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/cli.py +0 -0
  18. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/clients/__init__.py +0 -0
  19. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/clients/additional_clients.py +0 -0
  20. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/clients/factory.py +0 -0
  21. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/clients/interface.py +0 -0
  22. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/clients/paramiko_client.py +0 -0
  23. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/config_manager.py +0 -0
  24. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/connection_config.py +0 -0
  25. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/connection_pool.py +0 -0
  26. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/exceptions.py +0 -0
  27. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/executor.py +0 -0
  28. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/__init__.py +0 -0
  29. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/approval.py +0 -0
  30. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/connect.py +0 -0
  31. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/context.py +0 -0
  32. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/docker.py +0 -0
  33. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/execute.py +0 -0
  34. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/file_transfer.py +0 -0
  35. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/host.py +0 -0
  36. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/key.py +0 -0
  37. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/process.py +0 -0
  38. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/schemas.py +0 -0
  39. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/session.py +0 -0
  40. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/handlers/utils.py +0 -0
  41. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/key_manager.py +0 -0
  42. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/logging_config.py +0 -0
  43. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/runtime_guard.py +0 -0
  44. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/secret_provider.py +0 -0
  45. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/security.py +0 -0
  46. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/server.py +0 -0
  47. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/service.py +0 -0
  48. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/session_manager.py +0 -0
  49. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/tunnel.py +0 -0
  50. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/ssh_mcp/watchdog.py +0 -0
  51. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/tests/test_config_manager.py +0 -0
  52. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/tests/test_key_manager.py +0 -0
  53. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/tests/test_security.py +0 -0
  54. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/tests/test_server.py +0 -0
  55. {ssh_licco-2.2.0 → ssh_licco-2.2.1}/tests/test_session_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssh-licco
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: SSH Model Context Protocol Server - Enable SSH functionality for AI models
5
5
  Author-email: SSH LICCO Team <contact@ssh-licco.dev>
6
6
  License: MIT
@@ -256,7 +256,7 @@ mv /path/to/junk /tmp/.trash_$(date +%s)/
256
256
 
257
257
  命中硬拦截时会输出 `WARNING` 审计日志(含 category 与命令),便于 SOC 监控。
258
258
 
259
- ### 🏛️ 生产加固四项(v2.1.0 新增)
259
+ ### 🏛️ 生产加固四项(v2.1.0 + v2.2.0 演进)
260
260
 
261
261
  SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
262
262
 
@@ -265,18 +265,20 @@ SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
265
265
  | 1. 运行账号最小权限 | `SSH_RUNTIME_GUARD=true` | 专用普通账号运行,拒绝 root/sudo 启动 |
266
266
  | 2. 密钥不落地磁盘 | `SSH_SECRET_PROVIDER_ENABLED=true` | 私钥从 KMS 临时拉取到内存,用完清零,不落盘 |
267
267
  | 3. 双层命令拦截 | `SSH_REMOTE_GUARD=true` + 远端 ForceCommand | 跳板机侧禁元字符 + 远端二次白名单校验 |
268
- | 4. 高危操作审批 | `SSH_APPROVAL_GATE=true` | rm/reboot/iptables 等高危命令需人工审批,AI 不能直接下发 |
268
+ | 4. 灾难性命令硬拦截(v2.2.0 新增) | 默认开启,不可关闭 | rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb、chmod -R 777/000 /、`> /dev/sd*` 等在 MCP 网关层被**无条件**拒绝;任何安全级别、`confirm_dangerous=true` 等均无法绕过 |
269
+
270
+ > **关于 v2.1.0 引入的"高危操作审批"项**:v2.1.0 曾提供 `SSH_APPROVAL_GATE=true` + 3 个审批工具作为第 4 项加固。v2.2.0 起该项被**硬拦截取代**——审批流程依赖 AI 自报命令,存在闭环风险;硬拦截更直接,灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。`SSH_APPROVAL_GATE` 环境变量与 `ssh_mcp/approval.py` 代码仍保留作为参考,但不建议在生产启用。
269
271
 
270
272
  完整方案见 [docs/SECURITY_HARDENING.md](docs/SECURITY_HARDENING.md)。
271
273
 
272
274
  ---
273
275
 
274
- ## 🛠️ 可用工具(v2.1.0 扩充至 12 个)
276
+ ## 🛠️ 可用工具(v2.2.0 维持 9 个;v2.1.0 曾增加的 3 个审批工具因流程闭环风险已下线)
275
277
 
276
278
  | 工具 | 描述 | 核心能力 |
277
279
  |------|------|---------|
278
280
  | `ssh_connect` | 连接管理 | 自动读取环境变量/配置,支持密码+密钥认证,可保存配置,登录后自动执行命令 |
279
- | `ssh_execute` | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.1.0 新增 `approval_id`(高危审批)与 `remote_guard`(双层拦截)参数 |
281
+ | `ssh_execute` | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.1.0 新增 `remote_guard`(双层拦截)参数;v2.2.0 起对灾难性命令(rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb 等)做**无条件硬拦截** |
280
282
  | `ssh_disconnect` | 会话管理 | 断开指定会话 OR 列出所有活跃会话 |
281
283
  | `ssh_file_transfer` | 文件传输 | 上传/下载/列表/写入/追加/删除/创建目录/查看元信息(8 种操作);v2.1.3+ delete 操作新增 Windows/Unix 敏感路径拦截与路径遍历防护 |
282
284
  | `ssh_host` | 主机管理 | `action=list/add/remove` 增删查主机配置 |
@@ -284,9 +286,8 @@ SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
284
286
  | `ssh_generate_key` | 密钥生成 | RSA / Ed25519 密钥对 |
285
287
  | `ssh_session` | screen/tmux 会话 | 持久化远程会话管理(create/send/capture/list/kill),SSH 断开后进程依然存活 |
286
288
  | `ssh_process` | 进程管理 | 启动/停止/查询远程进程,SSH 端口转发(tunnel_open/tunnel_close/tunnel_list) |
287
- | `ssh_request_approval` | 高危审批申请(v2.1.0 新增) | AI 提交高危命令审批申请,返回 approval_id 等待人工审批 |
288
- | `ssh_approve_command` | 高危审批决定(v2.1.0 新增) | 运维人员人工审批 AI 申请,approved/rejected |
289
- | `ssh_list_approvals` | 审批记录查询(v2.1.0 新增) | 列出待审批队列或全部历史记录 |
289
+
290
+ > **关于 v2.1.0 引入的 3 个审批工具**(`ssh_request_approval` / `ssh_approve_command` / `ssh_list_approvals`):已从 MCP `list_tools()` 移除。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。相关代码(`ssh_mcp/approval.py`、`ssh_mcp/handlers/approval.py`)保留作为参考,但不暴露给 MCP。
290
291
 
291
292
  ### 📖 详细文档
292
293
 
@@ -223,7 +223,7 @@ mv /path/to/junk /tmp/.trash_$(date +%s)/
223
223
 
224
224
  命中硬拦截时会输出 `WARNING` 审计日志(含 category 与命令),便于 SOC 监控。
225
225
 
226
- ### 🏛️ 生产加固四项(v2.1.0 新增)
226
+ ### 🏛️ 生产加固四项(v2.1.0 + v2.2.0 演进)
227
227
 
228
228
  SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
229
229
 
@@ -232,18 +232,20 @@ SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
232
232
  | 1. 运行账号最小权限 | `SSH_RUNTIME_GUARD=true` | 专用普通账号运行,拒绝 root/sudo 启动 |
233
233
  | 2. 密钥不落地磁盘 | `SSH_SECRET_PROVIDER_ENABLED=true` | 私钥从 KMS 临时拉取到内存,用完清零,不落盘 |
234
234
  | 3. 双层命令拦截 | `SSH_REMOTE_GUARD=true` + 远端 ForceCommand | 跳板机侧禁元字符 + 远端二次白名单校验 |
235
- | 4. 高危操作审批 | `SSH_APPROVAL_GATE=true` | rm/reboot/iptables 等高危命令需人工审批,AI 不能直接下发 |
235
+ | 4. 灾难性命令硬拦截(v2.2.0 新增) | 默认开启,不可关闭 | rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb、chmod -R 777/000 /、`> /dev/sd*` 等在 MCP 网关层被**无条件**拒绝;任何安全级别、`confirm_dangerous=true` 等均无法绕过 |
236
+
237
+ > **关于 v2.1.0 引入的"高危操作审批"项**:v2.1.0 曾提供 `SSH_APPROVAL_GATE=true` + 3 个审批工具作为第 4 项加固。v2.2.0 起该项被**硬拦截取代**——审批流程依赖 AI 自报命令,存在闭环风险;硬拦截更直接,灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。`SSH_APPROVAL_GATE` 环境变量与 `ssh_mcp/approval.py` 代码仍保留作为参考,但不建议在生产启用。
236
238
 
237
239
  完整方案见 [docs/SECURITY_HARDENING.md](docs/SECURITY_HARDENING.md)。
238
240
 
239
241
  ---
240
242
 
241
- ## 🛠️ 可用工具(v2.1.0 扩充至 12 个)
243
+ ## 🛠️ 可用工具(v2.2.0 维持 9 个;v2.1.0 曾增加的 3 个审批工具因流程闭环风险已下线)
242
244
 
243
245
  | 工具 | 描述 | 核心能力 |
244
246
  |------|------|---------|
245
247
  | `ssh_connect` | 连接管理 | 自动读取环境变量/配置,支持密码+密钥认证,可保存配置,登录后自动执行命令 |
246
- | `ssh_execute` | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.1.0 新增 `approval_id`(高危审批)与 `remote_guard`(双层拦截)参数 |
248
+ | `ssh_execute` | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.1.0 新增 `remote_guard`(双层拦截)参数;v2.2.0 起对灾难性命令(rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb 等)做**无条件硬拦截** |
247
249
  | `ssh_disconnect` | 会话管理 | 断开指定会话 OR 列出所有活跃会话 |
248
250
  | `ssh_file_transfer` | 文件传输 | 上传/下载/列表/写入/追加/删除/创建目录/查看元信息(8 种操作);v2.1.3+ delete 操作新增 Windows/Unix 敏感路径拦截与路径遍历防护 |
249
251
  | `ssh_host` | 主机管理 | `action=list/add/remove` 增删查主机配置 |
@@ -251,9 +253,8 @@ SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
251
253
  | `ssh_generate_key` | 密钥生成 | RSA / Ed25519 密钥对 |
252
254
  | `ssh_session` | screen/tmux 会话 | 持久化远程会话管理(create/send/capture/list/kill),SSH 断开后进程依然存活 |
253
255
  | `ssh_process` | 进程管理 | 启动/停止/查询远程进程,SSH 端口转发(tunnel_open/tunnel_close/tunnel_list) |
254
- | `ssh_request_approval` | 高危审批申请(v2.1.0 新增) | AI 提交高危命令审批申请,返回 approval_id 等待人工审批 |
255
- | `ssh_approve_command` | 高危审批决定(v2.1.0 新增) | 运维人员人工审批 AI 申请,approved/rejected |
256
- | `ssh_list_approvals` | 审批记录查询(v2.1.0 新增) | 列出待审批队列或全部历史记录 |
256
+
257
+ > **关于 v2.1.0 引入的 3 个审批工具**(`ssh_request_approval` / `ssh_approve_command` / `ssh_list_approvals`):已从 MCP `list_tools()` 移除。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。相关代码(`ssh_mcp/approval.py`、`ssh_mcp/handlers/approval.py`)保留作为参考,但不暴露给 MCP。
257
258
 
258
259
  ### 📖 详细文档
259
260
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ssh-licco"
3
- version = "2.2.0"
3
+ version = "2.2.1"
4
4
  description = "SSH Model Context Protocol Server - Enable SSH functionality for AI models"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssh-licco
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: SSH Model Context Protocol Server - Enable SSH functionality for AI models
5
5
  Author-email: SSH LICCO Team <contact@ssh-licco.dev>
6
6
  License: MIT
@@ -256,7 +256,7 @@ mv /path/to/junk /tmp/.trash_$(date +%s)/
256
256
 
257
257
  命中硬拦截时会输出 `WARNING` 审计日志(含 category 与命令),便于 SOC 监控。
258
258
 
259
- ### 🏛️ 生产加固四项(v2.1.0 新增)
259
+ ### 🏛️ 生产加固四项(v2.1.0 + v2.2.0 演进)
260
260
 
261
261
  SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
262
262
 
@@ -265,18 +265,20 @@ SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
265
265
  | 1. 运行账号最小权限 | `SSH_RUNTIME_GUARD=true` | 专用普通账号运行,拒绝 root/sudo 启动 |
266
266
  | 2. 密钥不落地磁盘 | `SSH_SECRET_PROVIDER_ENABLED=true` | 私钥从 KMS 临时拉取到内存,用完清零,不落盘 |
267
267
  | 3. 双层命令拦截 | `SSH_REMOTE_GUARD=true` + 远端 ForceCommand | 跳板机侧禁元字符 + 远端二次白名单校验 |
268
- | 4. 高危操作审批 | `SSH_APPROVAL_GATE=true` | rm/reboot/iptables 等高危命令需人工审批,AI 不能直接下发 |
268
+ | 4. 灾难性命令硬拦截(v2.2.0 新增) | 默认开启,不可关闭 | rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb、chmod -R 777/000 /、`> /dev/sd*` 等在 MCP 网关层被**无条件**拒绝;任何安全级别、`confirm_dangerous=true` 等均无法绕过 |
269
+
270
+ > **关于 v2.1.0 引入的"高危操作审批"项**:v2.1.0 曾提供 `SSH_APPROVAL_GATE=true` + 3 个审批工具作为第 4 项加固。v2.2.0 起该项被**硬拦截取代**——审批流程依赖 AI 自报命令,存在闭环风险;硬拦截更直接,灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。`SSH_APPROVAL_GATE` 环境变量与 `ssh_mcp/approval.py` 代码仍保留作为参考,但不建议在生产启用。
269
271
 
270
272
  完整方案见 [docs/SECURITY_HARDENING.md](docs/SECURITY_HARDENING.md)。
271
273
 
272
274
  ---
273
275
 
274
- ## 🛠️ 可用工具(v2.1.0 扩充至 12 个)
276
+ ## 🛠️ 可用工具(v2.2.0 维持 9 个;v2.1.0 曾增加的 3 个审批工具因流程闭环风险已下线)
275
277
 
276
278
  | 工具 | 描述 | 核心能力 |
277
279
  |------|------|---------|
278
280
  | `ssh_connect` | 连接管理 | 自动读取环境变量/配置,支持密码+密钥认证,可保存配置,登录后自动执行命令 |
279
- | `ssh_execute` | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.1.0 新增 `approval_id`(高危审批)与 `remote_guard`(双层拦截)参数 |
281
+ | `ssh_execute` | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.1.0 新增 `remote_guard`(双层拦截)参数;v2.2.0 起对灾难性命令(rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb 等)做**无条件硬拦截** |
280
282
  | `ssh_disconnect` | 会话管理 | 断开指定会话 OR 列出所有活跃会话 |
281
283
  | `ssh_file_transfer` | 文件传输 | 上传/下载/列表/写入/追加/删除/创建目录/查看元信息(8 种操作);v2.1.3+ delete 操作新增 Windows/Unix 敏感路径拦截与路径遍历防护 |
282
284
  | `ssh_host` | 主机管理 | `action=list/add/remove` 增删查主机配置 |
@@ -284,9 +286,8 @@ SSH 跳板模式部署的生产必做加固,补齐跳板机单点风险:
284
286
  | `ssh_generate_key` | 密钥生成 | RSA / Ed25519 密钥对 |
285
287
  | `ssh_session` | screen/tmux 会话 | 持久化远程会话管理(create/send/capture/list/kill),SSH 断开后进程依然存活 |
286
288
  | `ssh_process` | 进程管理 | 启动/停止/查询远程进程,SSH 端口转发(tunnel_open/tunnel_close/tunnel_list) |
287
- | `ssh_request_approval` | 高危审批申请(v2.1.0 新增) | AI 提交高危命令审批申请,返回 approval_id 等待人工审批 |
288
- | `ssh_approve_command` | 高危审批决定(v2.1.0 新增) | 运维人员人工审批 AI 申请,approved/rejected |
289
- | `ssh_list_approvals` | 审批记录查询(v2.1.0 新增) | 列出待审批队列或全部历史记录 |
289
+
290
+ > **关于 v2.1.0 引入的 3 个审批工具**(`ssh_request_approval` / `ssh_approve_command` / `ssh_list_approvals`):已从 MCP `list_tools()` 移除。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。相关代码(`ssh_mcp/approval.py`、`ssh_mcp/handlers/approval.py`)保留作为参考,但不暴露给 MCP。
290
291
 
291
292
  ### 📖 详细文档
292
293
 
@@ -1,8 +1,8 @@
1
1
  # SSH-LICCO 版本信息
2
2
  # 所有代码中的版本信息都从这里读取
3
- # 版本号:2.2.0
3
+ # 版本号:2.2.1
4
4
 
5
- __version__ = "2.2.0"
5
+ __version__ = "2.2.1"
6
6
  __author__ = "Li Qi"
7
7
  __email__ = "1985694657@qq.com"
8
8
  __license__ = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes