SSH LICCO MCP Server

io.github.Echoqili由 GitHub 帳號 Echoqili 發布v2.7.3更新於 Oct 24, 2026

SSH Model Context Protocol Server - Enable SSH functionality for AI models

概覽

AI 產生的概覽

在本機執行的 MCP 伺服器,讓 AI 助理透過 SSH 連線遠端伺服器,執行指令、傳輸檔案並管理 Docker 與行程。

可以做什麼
  • 連線並管理 SSH 工作階段,列出使用中的工作階段、儲存主機設定
  • 執行遠端指令,支援逾時控制與 nohup、screen、tmux 背景模式,並可跨多台主機批次執行
  • 透過 SFTP 上傳、下載、列出、寫入、附加、刪除檔案並檢視中繼資料
  • 管理目標主機上的 Docker:檢視容器與映像、建置映像、讀取日誌
  • 建立與管理持續存在的 screen/tmux 工作階段,啟動、停止、查詢行程,開啟 SSH 連接埠轉送
  • 產生 RSA 或 Ed25519 金鑰對,並留下結構化的操作稽核日誌
適用情境
適合想用自然語言讓助理操作 Linux、macOS 或 Windows Server 主機的情境,例如查看日誌、部署或建置應用、檢查 Docker、搬移檔案,而不必自己輸入指令。較適合開發、測試或個人伺服器,並可自行選擇合適的安全等級。
執行需求
以本機 Python 套件形式執行(需 Python 3.10 以上),透過 python -m ssh_mcp.server 啟動。需要能連線目標主機的網路與 SSH 憑證:SSH_HOST 與 SSH_USER 為必填,SSH_PASSWORD 為密碼密鑰,SSH_PORT 預設 22;也支援金鑰與 Agent 驗證。另有選用變數可設定安全等級、允許的指令、基底目錄、逾時與稽核日誌路徑。
安裝前請注意
助理會取得遠端機器的實際 shell 權限:執行指令、寫入與刪除檔案、控制行程、建置 Docker 映像都會改變遠端狀態。SSH_PASSWORD 與 SSH_SUDO_PASSWORD 會存放在 MCP 設定中,需保護該設定檔。指令白名單與安全等級(strict、balanced、relaxed)是主要防線,災難性指令會被無條件攔截,但 README 指出其他高風險操作需直接登入伺服器完成。稽核日誌會記錄所執行的指令。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 SSH LICCO MCP Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

🚀 SSH LICCO

[PyPI version] [Python 3.10+] [License: MIT] [MCP Registry]

让 AI 帮你操作服务器! 通过自然语言对话,AI 可以帮你执行命令、管理文件、查看日志、部署应用等。


📚 文档导航

快速开始

核心功能

高级主题

开发资源


✨ 特性亮点

  • 🎯 自然语言控制 - 用对话方式操作服务器
  • 🔐 多种认证方式 - 密码、密钥、Agent 转发
  • 🔗 长连接支持 - 自动保活(30 秒心跳),避免账户锁定
  • ⏱️ 可配置超时 - Banner 超时 (60s)、会话超时 (2 小时),支持自动重连
  • 📦 异步高性能 - 基于 Paramiko 的异步架构(线程池 + asyncio)
  • 🛡️ 完善的异常处理 - 统一的错误处理机制(7 层异常层次)
  • 📊 会话管理 - 支持多个并发 SSH 会话(最大 10 个,每主机 3 个)
  • 📁 SFTP 文件传输 - 上传、下载、目录管理
  • 🖊️ 远程文件编辑 - 直接写入/追加文件内容,无需下载再上传
  • 🔑 密钥管理 - 生成和管理 SSH 密钥对(RSA/Ed25519)
  • 📝 审计日志 - 完整的操作审计记录(JSON 结构化日志)
  • 🚀 连接池 - 高性能连接复用(PooledConnection + ConnectionPool)
  • 📊 批量执行 - 多主机并行命令执行(BatchExecutor + AsyncBatchExecutor)
  • 🐳 Docker 支持 - Docker 构建和状态监控
  • 📋 后台任务 - 可靠的后台进程启动(nohup + bash -c 包装,单次 SSH 调用无竞态)
  • 🖥️ screen/tmux 会话 - 持久化远程会话,SSH 断开后进程依然存活
  • 🪟 Windows 服务器支持 - 支持 Windows Server(OpenSSH for Windows)与 Linux/macOS 目标主机
  • 🔍 进程管理 - 启动/停止/查询远程进程、SSH 端口转发(tunnel)
  • 🔍 看门狗 - 任务监控、心跳检测、全局异常处理
  • 🛡️ 文件传输路径安全校验 - ssh_file_transfer delete 自动识别 Windows / Unix 路径风格并拦截敏感路径与路径遍历

🖥️ 目标主机支持

SSH-LICCO 基于标准 SSH/SFTP 协议,可连接以下目标主机:

操作系统要求备注
LinuxOpenSSH 7.0+推荐,完整支持所有功能
Windows ServerOpenSSH for Windows / PowerShell Remoting over SSHv2.1.3+ 支持 Windows 路径风格与安全校验
macOS系统内置 OpenSSH完整支持

提示:连接 Windows 服务器时,请使用 Windows 风格路径(如 C:\temp\file.txt),系统会自动识别并进行路径安全校验。


📦 快速安装

方式一:pip 安装(推荐)

bash
pip install ssh-licco

方式二:从源码安装

bash
git clone https://github.com/Echoqili/ssh-licco.gitcd ssh-liccopip install -e .

Python 版本要求: Python 3.10+


🚀 快速开始

1️⃣ 配置 MCP 服务器

在 Trae / Cursor / Claude Desktop 中使用

打开设置 → MCP → 添加新服务器:

json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server"    }  }}

2️⃣ 配置 SSH 连接(可选但推荐)

方式 A:环境变量配置(推荐)
json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_HOST": "192.168.1.100",        "SSH_USER": "root",        "SSH_PASSWORD": "your_password",        "SSH_PORT": "22",        "SSH_TIMEOUT": "60",        "SSH_KEEPALIVE_INTERVAL": "30",        "SSH_SESSION_TIMEOUT": "7200",        "SSH_CLIENT_TYPE": "common"      }    }  }}

环境变量说明:

  • SSH_HOST: SSH 服务器地址
  • SSH_USER: 用户名
  • SSH_PASSWORD: 密码
  • SSH_PORT: 端口(默认 22)
  • SSH_TIMEOUT: 连接超时(秒)
  • SSH_KEEPALIVE_INTERVAL: 保活间隔(秒)
  • SSH_SESSION_TIMEOUT: 会话超时(秒)
  • SSH_CLIENT_TYPE: SSH 客户端类型(可选,默认 common)
    • common - paramiko(稳定可靠,推荐)⭐
    • performance - asyncssh(高性能,适合高并发)🚀
    • development - fabric(简化 API,适合快速开发)👨‍💻

🔐 安全配置

新增加固默认值与迁移说明见 安全边界与加固配置: 连接默认验证主机密钥,确认参数不再绕过命令策略,文件传输执行目录隔离。 下表是项目的模式说明,不是第三方平台的安全评分。

重要:从 v0.2.1 开始,ssh-licco 提供多级安全策略,可根据使用场景灵活配置。

多级安全策略

级别名称适用场景防护强度
STRICT严格模式生产环境、公共服务器最高 ⭐⭐⭐
BALANCED平衡模式开发环境、个人服务器(默认)高 ⭐⭐
RELAXED宽松模式测试环境、完全信任的服务器中等 ⭐

快速配置

方式 1:环境变量(推荐)

Windows PowerShell:

powershell
$env:SSH_SECURITY_LEVEL = "balanced"$env:SSH_EXTRA_ALLOWED_COMMANDS = "git,pip,npm"

Linux/Mac:

bash
export SSH_SECURITY_LEVEL="balanced"export SSH_EXTRA_ALLOWED_COMMANDS="git,pip,npm"
方式 2:MCP 配置文件
json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_SECURITY_LEVEL": "balanced",        "SSH_EXTRA_ALLOWED_COMMANDS": "git,pip,npm",        "SSH_BASE_DIR": "/home"      }    }  }}

📖 详细文档

🛡️ 硬拦截灾难性命令(v2.2.0 新增)

为防止任何误操作或越权调用直接打到远程 shell,ssh-licco 在所有安全级别下都无条件拦截以下灾难性命令模式,无法通过 confirm_dangerous=true、confirmation_layer=N、调整 SSH_SECURITY_LEVEL 等任何方式绕过:

  • rm -rf 作用于绝对路径(含 /、/*、/path、/path/*,-fr 变体同效)
  • mkfs.* 任意文件系统格式化
  • dd if=/dev/(zero|random|urandom) of=/dev/(sd|nvme) 覆写裸盘
  • bash fork-bomb(:(){ :|:& };: 及空白变体)
  • chmod -R 777 / / chmod -R 000 / 根目录递归改权限
  • > /dev/(sd|nvme) / >> /dev/(sd|nvme) 裸设备重定向

如确需执行上述操作,请直接通过 SSH 登录服务器(绕过 MCP 网关)进行。安全且可逆的替代方案:

bash
# 旧做法(v2.2.0 之前):rm -rf /path/to/junk  ← 现已被硬拦截# 推荐做法:mv 到回收站,约定时间后清理mv /path/to/junk /tmp/.trash_$(date +%s)/

命中硬拦截时会输出 WARNING 审计日志(含 category 与命令),便于 SOC 监控。


🛠️ 可用工具(v2.2.0 维持 9 个;v2.1.0 曾增加的 3 个审批工具因流程闭环风险已下线)

工具描述核心能力
ssh_connect连接管理自动读取环境变量/配置,支持密码+密钥认证,可保存配置,登录后自动执行命令
ssh_execute命令执行自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.2.0 起对灾难性命令(rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb 等)做无条件硬拦截
ssh_disconnect会话管理断开指定会话 OR 列出所有活跃会话
ssh_file_transfer文件传输上传/下载/列表/写入/追加/删除/创建目录/查看元信息(8 种操作);v2.1.3+ delete 操作新增 Windows/Unix 敏感路径拦截与路径遍历防护
ssh_host主机管理action=list/add/remove 增删查主机配置
ssh_dockerDocker 管理action=ps/images/build/logs 全生命周期管理
ssh_generate_key密钥生成RSA / Ed25519 密钥对
ssh_sessionscreen/tmux 会话持久化远程会话管理(create/send/capture/list/kill),SSH 断开后进程依然存活
ssh_process进程管理启动/停止/查询远程进程,SSH 端口转发(tunnel_open/tunnel_close/tunnel_list)

关于 v2.1.0 引入的 3 个审批工具(ssh_request_approval / ssh_approve_command / ssh_list_approvals):已从 MCP list_tools() 移除,代码已在 v2.2.0 删除(ssh_mcp/approval.py、ssh_mcp/handlers/approval.py)。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。

📖 详细文档


💡 使用示例

示例 1:执行命令

用户:帮我查看服务器上的 Docker 容器AI:调用 ssh_connect → ssh_execute "docker ps"
[执行结果]CONTAINER ID   IMAGE     COMMAND   STATUS   PORTSabc123         nginx     "nginx"   Up 2 days 80:80

示例 2:文件上传

用户:把这个文件上传到 /var/www/htmlAI:调用 ssh_connect → ssh_file_transfer
[上传成功]本地:./index.html远程:/var/www/html/index.html大小:2.3 KB

示例 3:Docker 构建(长任务)

用户:帮我构建 Docker 镜像AI:调用 ssh_execute(background=True) 后台执行 docker build...
[后台任务已启动]Session ID: a1b2c3d4命令:docker build -t myapp .使用 ssh_execute(session_id="a1b2c3d4", command="cat /tmp/build.log") 查看进度

示例 4:数据库检查

用户:检查 PostgreSQL 是否正常运行AI:调用 ssh_execute "pg_isready -h localhost -p 5432"
[检查结果]localhost:5432 - accepting connections✅ PostgreSQL 运行正常

📖 更多示例


📋 完整配置示例

场景 1:Web 开发者

json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_SECURITY_LEVEL": "balanced",        "SSH_EXTRA_ALLOWED_COMMANDS": "git,npm,docker,composer,pm2",        "SSH_BASE_DIR": "/var/www",        "SSH_HOST": "192.168.1.100",        "SSH_USER": "deploy",        "SSH_PASSWORD": "your-password"      }    }  }}

场景 2:Python 开发者

json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_SECURITY_LEVEL": "balanced",        "SSH_EXTRA_ALLOWED_COMMANDS": "pip,poetry,python3,pytest,black",        "SSH_HOST": "192.168.1.100",        "SSH_USER": "developer",        "SSH_PASSWORD": "your-password"      }    }  }}

场景 3:数据库管理员

json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_SECURITY_LEVEL": "balanced",        "SSH_EXTRA_ALLOWED_COMMANDS": "psql,mysql,mongosh,pg_isready",        "SSH_HOST": "192.168.1.100",        "SSH_USER": "dbadmin",        "SSH_PASSWORD": "your-password"      }    }  }}

场景 4:系统管理员

json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_SECURITY_LEVEL": "relaxed",        "SSH_EXTRA_ALLOWED_COMMANDS": "sudo,apt,yum,systemctl,journalctl,docker,kubectl",        "SSH_HOST": "192.168.1.100",        "SSH_USER": "root",        "SSH_PASSWORD": "your-password"      }    }  }}

场景 5:生产环境(最高安全)

json
{  "mcpServers": {    "ssh": {      "command": "python -m ssh_mcp.server",      "env": {        "SSH_SECURITY_LEVEL": "strict",        "SSH_HOST": "192.168.1.100",        "SSH_USER": "app-user",        "SSH_PASSWORD": "your-password",        "SSH_BASE_DIR": "/home/app-user"      }    }  }}

📖 更多配置

🌐 完整环境变量速查(v2.3.0)

下表所有变量均被代码读取。注意:

  • SSH_RATE_LIMIT 是 bool 总开关(true/false),SSH_RATE_LIMIT_MAX 才是次数上限,两者分开配置
  • 主机密钥检查(strict_host_key_checking)不通过 env 配置,请用 ssh_connect 工具参数或 hosts.json
分类变量默认说明
安全SSH_SECURITY_LEVELbalanced安全级别:strict / balanced / relaxed
SSH_BASE_DIR/homeUnix 远程 SFTP 路径校验基目录
SSH_LOCAL_BASE_DIR当前工作目录本地文件上传源与下载目标的允许目录
SSH_EXTRA_ALLOWED_COMMANDS(空)额外允许的命令(逗号分隔)
SSH_ALLOWED_COMMANDS_FILE(空)命令白名单 JSON 文件路径
SSH_AUDIT_LOG_PATH(空)审计日志文件路径
限流SSH_RATE_LIMITtrue限流总开关(bool)
SSH_RATE_LIMIT_MAX30限流次数上限
SSH_RATE_LIMIT_WINDOW60限流窗口(秒)
硬拦截(无 env)—灾难性命令硬拦截,零配置零绕过
连接默认SSH_HOST / SSH_PORT / SSH_USER / SSH_PASSWORD127.0.0.1 / 22 / root / (空)单 host 模式默认连接参数
SSH_TIMEOUT60连接超时(秒)
SSH_KEEPALIVE_INTERVAL30keepalive 间隔(秒)
SSH_SESSION_TIMEOUT7200会话超时(秒)
SSH_CLIENT_TYPEparamikoSSH 客户端实现:paramiko / asyncssh
SSH_FORCE_ENV_CONFIGfalse强制 env 配置覆盖 hosts.json
SSH_SUDO_PASSWORD(空)sudo 密码,配合 use_sudo=true 走 sudo -S

⚠️ 依赖版本兼容性

已知依赖冲突

以下依赖版本冲突已在测试环境中验证,不影响 ssh-licco 的正常使用:

1. starlette 版本冲突
fastapi 需要 starlette<0.51.0但安装了 starlette 0.52.1

影响范围:

  • ✅ ssh-licco: 无影响,正常工作
  • ⚠️ fastapi: 可能存在兼容性问题(如果同时使用 fastapi)

解决方案:

  • 如果只使用 ssh-licco,可以忽略此警告
  • 如果同时使用 fastapi,建议:
    bash
    pip install starlette==0.50.0
2. cryptography 版本冲突
pyopenssl 需要 cryptography<45但安装了 cryptography 46.0.5

影响范围:

  • ✅ ssh-licco: 无影响,正常工作
  • ⚠️ pyopenssl: 可能存在兼容性问题(如果同时使用 pyopenssl)

解决方案:

  • 如果只使用 ssh-licco,可以忽略此警告
  • 如果同时使用 pyopenssl,建议:
    bash
    pip install cryptography==44.0.0

测试环境

测试通过的配置:

  • ✅ starlette 0.52.1 + ssh-licco 0.4.1
  • ✅ cryptography 46.0.5 + ssh-licco 0.4.1
  • ✅ mcp 1.26.0 + ssh-licco 0.4.1

测试场景:

  • ✅ SSH 连接和执行命令
  • ✅ 文件上传和下载
  • ✅ 后台任务执行
  • ✅ Docker 构建和监控
  • ✅ 多语言后台命令自动检测

为什么允许这些冲突?

ssh-licco 的核心依赖是:

  • mcp - MCP 协议实现
  • asyncssh - SSH 客户端
  • paramiko - SSH 客户端(稳定模式)
  • pydantic - 数据验证

而 starlette 和 cryptography 是通过 mcp 间接引入的。ssh-licco 本身不直接使用这些库的 API,因此版本冲突不会影响 ssh-licco 的功能。


🔧 故障排查

常见问题

1. 连接失败

错误: Connection refused

解决:

  • 检查 SSH 服务是否运行:systemctl status sshd
  • 检查防火墙设置:ufw status
  • 确认端口正确:默认 22
2. 认证失败

错误: Authentication failed

解决:

  • 检查用户名和密码
  • 尝试使用密钥认证
  • 查看 SSH 日志:/var/log/auth.log
3. 命令被阻止

错误: 命令 'xxx' 不在允许列表中

解决:

json
{  "SSH_SECURITY_LEVEL": "balanced",  "SSH_EXTRA_ALLOWED_COMMANDS": "被阻止的命令"}

📖 详细文档


🎓 学习资源

Skills 文档

配置文档

API 文档


🔗 相关链接

项目资源

文档索引

文档描述位置
📖 配置指南完整配置选项和场景MCP_CONFIG_GUIDE.md
🔐 安全指南安全配置详解SECURITY_CONFIG_GUIDE.md
📊 API 参考完整 API 文档docs/API_REFERENCE.md
🎓 Skills开发、运维、安装指南docs/skills/
📦 发布指南版本发布流程docs/skills/RELEASE_SKILL.md

🧪 测试

测试状态

指标状态
测试用例311 passed, 0 skipped
覆盖率16 个源模块全覆盖
测试框架pytest + pytest-asyncio

测试模块覆盖

源模块测试文件用例数
exceptions.pytest_exceptions.py7
connection_config.pytest_connection_config.py8
security.pytest_security.py24
logging_config.pytest_logging_config.py8
audit_logger.pytest_audit_logger.py12
executor.pytest_executor.py8
watchdog.pytest_watchdog.py18
key_manager.pytest_key_manager.py6
config_manager.pytest_config_manager.py10
clients/interface.pytest_factory.py10
clients/paramiko_client.pytest_paramiko_client.py18
clients/factory.pytest_factory.py10
session_manager.pytest_session_manager.py18
connection_pool.pytest_connection_pool.py10
batch_executor.pytest_batch_executor.py10
server.pytest_server.py30+
service.pytest_service.py14

运行测试

bash
# 运行全部测试pytest tests/ -v
# 运行特定模块测试pytest tests/test_security.py -v
# 查看覆盖率pytest --cov=ssh_mcp --cov-report=term-missing

📦 发布流程

先在独立分支同步版本并运行测试:

powershell
python sync_version.py 2.8.1 --no-commit --no-tagpython sync_version.py --checkpython -m pytest tests -qnode --test tests/install.test.cjs

代码合并后推送 vX.Y.Z 标签,现有发布流程依次执行版本校验、测试、打包、 PyPI 上传、公开安装源码核验,再创建或补齐 GitHub Release。 不需要向 npm 注册表发布;Node 安装包通过 GitHub Release 下载。

支持手动只验证,以及针对原标签恢复中断的发布。网络查询失败时停止上传; 已有 PyPI 文件和 Release 安装包不会重复覆盖。 详细操作及凭据配置见 发布与失败恢复。


📊 版本历史

來源:README.md,提交 47b5fd3

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v2.7.3最新Oct 11, 2026
  2. v2.7.2Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分