Back to Browse

Ssh Licco MCP Server

Developer ToolsUse Caution2.8Local
Free

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

About

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

Security Report

2.8
Use Caution2.8Critical Risk

SSH-LICCO is an MCP server providing remote SSH command execution and file operations. While it implements security controls (command validation, path checks, audit logging, rate limiting), several moderate concerns exist: hardcoded default credentials in environment examples, potential path traversal risks in file operations, incomplete sudo password handling, and overly permissive default security levels that could allow dangerous operations. The server's core purpose (remote server management) requires broad permissions (shell_exec, file operations, network access), which are justified, but implementation gaps in the security layer create exploitable scenarios. Supply chain analysis found 9 known vulnerabilities in dependencies (1 critical, 6 high severity). Package verification found 1 issue.

4 files analyzed · 25 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

network_ssh

Check that this permission is expected for this type of plugin.

Shell Command Execution

Runs commands on your machine. Be cautious — only use if you trust this plugin.

File System Read

Reads files on your machine. Normal for tools that analyze or process local data.

File System Write

Writes or modifies files on your machine. Check that this is expected for the tool.

file_delete

Check that this permission is expected for this type of plugin.

env_vars

Check that this permission is expected for this type of plugin.

process_spawn

Check that this permission is expected for this type of plugin.

system_info

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

SSH server hostname or IP addressOptional

Environment variable: SSH_HOST

SSH username for authenticationOptional

Environment variable: SSH_USER

SSH password for authenticationRequired

Environment variable: SSH_PASSWORD

SSH port numberOptional

Environment variable: SSH_PORT

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-echoqili-ssh-licco": {
      "env": {
        "SSH_HOST": "your-ssh-host-here",
        "SSH_PORT": "your-ssh-port-here",
        "SSH_USER": "your-ssh-user-here",
        "SSH_PASSWORD": "your-ssh-password-here"
      },
      "args": [
        "-y",
        "ssh-licco"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub 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 安装(推荐)

pip install ssh-licco

方式二:从源码安装

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 → 添加新服务器:

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

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

方式 A:环境变量配置(推荐)
{
  "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:

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

Linux/Mac:

export SSH_SECURITY_LEVEL="balanced"
export SSH_EXTRA_ALLOWED_COMMANDS="git,pip,npm"
方式 2:MCP 配置文件
{
  "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 网关)进行。安全且可逆的替代方案:

# 旧做法(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:执行命令

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

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

示例 2:文件上传

用户:把这个文件上传到 /var/www/html
AI:调用 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 开发者

{
  "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 开发者

{
  "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:数据库管理员

{
  "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:系统管理员

{
  "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:生产环境(最高安全)

{
  "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 版本冲突
fastapi 需要 starlette<0.51.0
但安装了 starlette 0.52.1

影响范围:

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

解决方案:

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

影响范围:

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

解决方案:

  • 如果只使用 ssh-licco,可以忽略此警告
  • 如果同时使用 pyopenssl,建议:
    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' 不在允许列表中

解决:

{
  "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

🧪 测试

测试状态

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

运行测试

# 运行全部测试
pytest tests/ -v

# 运行特定模块测试
pytest tests/test_security.py -v

# 查看覆盖率
pytest --cov=ssh_mcp --cov-report=term-missing

📊 版本历史

Reviews

No reviews yet

Be the first to review this server!