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 分