io.github.Echoqili/ssh-licco

编码与调试

by echoqili

SSH Model Context Protocol Server,可让 AI 助手连接 SSH 服务器、执行命令,并支持远程运维自动化。

什么是 io.github.Echoqili/ssh-licco

SSH Model Context Protocol Server,可让 AI 助手连接 SSH 服务器、执行命令,并支持远程运维自动化。

README

🚀 SSH LICCO

<!-- mcp-name: io.github.Echoqili/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.git
cd ssh-licco
pip 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=trueconfirmation_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.pyssh_mcp/handlers/approval.py)。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。

📖 详细文档


💡 使用示例

示例 1:执行命令

code
用户:帮我查看服务器上的 Docker 容器
AI:调用 ssh_connect → ssh_execute "docker ps"

[执行结果]
CONTAINER ID   IMAGE     COMMAND   STATUS   PORTS
abc123         nginx     "nginx"   Up 2 days 80:80

示例 2:文件上传

code
用户:把这个文件上传到 /var/www/html
AI:调用 ssh_connect → ssh_file_transfer

[上传成功]
本地:./index.html
远程:/var/www/html/index.html
大小:2.3 KB

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

code
用户:帮我构建 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:数据库检查

code
用户:检查 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_LIMITbool 总开关(true/false),SSH_RATE_LIMIT_MAX 才是次数上限,两者分开配置
  • 主机密钥检查(strict_host_key_checking)不通过 env 配置,请用 ssh_connect 工具参数或 hosts.json
分类变量默认说明
安全SSH_SECURITY_LEVELbalanced安全级别:strict / balanced / relaxed
SSH_BASE_DIR/home路径校验基目录
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=truesudo -S

⚠️ 依赖版本兼容性

已知依赖冲突

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

1. starlette 版本冲突

code
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 版本冲突

code
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 - 数据验证

starlettecryptography 是通过 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

🧪 测试

测试状态

指标状态
测试用例400 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

📊 版本历史

常见问题

io.github.Echoqili/ssh-licco 是什么?

SSH Model Context Protocol Server,可让 AI 助手连接 SSH 服务器、执行命令,并支持远程运维自动化。

相关 Skills

前端设计

by anthropics

Universal
热门

面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。

想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。

编码与调试
未扫描165.3k

网页应用测试

by anthropics

Universal
热门

用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。

借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。

编码与调试
未扫描165.3k

网页构建器

by anthropics

Universal
热门

面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。

在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。

编码与调试
未扫描165.3k

相关 MCP Server

GitHub

编辑精选

by GitHub

热门

GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。

这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。

编码与调试
89.1k

by Context7

热门

Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。

它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。

编码与调试
60.0k

by tldraw

热门

tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。

这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。

编码与调试
49.5k

评论