Skip to main content
Glama

Kali-MCP

基于 MCP (Model Context Protocol) 的远程 Kali Linux 终端控制服务器。允许 AI 客户端(Claude Desktop、Cursor、Cline 等)通过 HTTP/SSE 远程操控真实的 Kali Shell 会话,适用于安全研究、渗透测试自动化、远程运维等场景。

架构概览

┌─────────────────┐    HTTP + SSE     ┌──────────────────────┐    stdin/stdout    ┌─────────────────┐    node-pty    ┌─────────────────┐
│  AI 客户端       │ ───────────────► │  Python 主控服务器    │ ────────────────► │  Node.js PTY    │ ─────────────► │  Kali Linux     │
│  Claude/Cursor  │  X-Kali-Token    │  FastMCP + Uvicorn    │  JSON-RPC 2.0     │  引擎           │  spawn/write   │  Shell (root)   │
│                 │ ◄─────────────── │  TokenAuthMiddleware  │ ◄──────────────── │  (node-pty)     │ ◄───────────── │                 │
└─────────────────┘    SSE 流         └──────────────────────┘    pty.output      └─────────────────┘    输出回传     └─────────────────┘
  • Python 主控 (mcp_kali_server.py):基于 FastMCP 框架,对外暴露 MCP 工具,负责会话管理、安全审查、密码认证

  • Node.js PTY 引擎 (pty_engine/index.js):通过 node-pty 创建真实伪终端,执行命令并回传输出

  • 通信协议:Python 与 Node.js 之间使用 JSON-RPC 2.0 over stdin/stdout

Related MCP server: K-MCP: Kali Model Context Protocol Server

环境要求

服务端(Kali Linux 主机)

依赖

最低版本

说明

Python

3.10+

需支持 tuple[str, int] 等新语法

Node.js

18+

PTY 引擎运行环境

npm

随 Node.js

安装 node-pty 依赖

Kali Linux

任意版本

建议以 root 运行(PS1 与 HOME 默认指向 /root

客户端(AI 助手)

任意支持 MCP SSE 传输的客户端:Claude Desktop、Cursor、Cline、Continue 等。

部署步骤

1. 获取项目代码

将项目目录复制到 Kali Linux 任意位置(路径已动态化,无需固定目录):

cp -r kali-mcp /opt/kali-mcp
cd /opt/kali-mcp

2. 创建虚拟环境并安装 Python 依赖

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

依赖清单(见 requirements.txt):

  • mcp>=1.28,<2 — MCP 协议核心库(Anthropic 官方 SDK v1.x;务必带上 <2 上界pip install mcp 现在默认装 2.x,2.x 已移除 mcp.server.fastmcp,代码会 import 失败)

  • pydantic>=2.0.0 — 数据模型校验

  • anyio>=4.0.0 — 异步兼容层

  • uvicornstarlette — ASGI 服务器与中间件

3. 安装 Node.js PTY 引擎依赖

cd pty_engine
npm install
cd ..

依赖:node-pty@^1.0.0(见 package.json)。

注意node-pty 是原生模块,安装时需要 makeg++。Kali 默认已包含,若缺失请执行 apt install -y build-essential python3-dev

4. 验证安装

python3 -c "from mcp.server.fastmcp import FastMCP; print('Python 依赖 OK')"
cd pty_engine && node -e "import('node-pty').then(()=>console.log('Node PTY OK'))" && cd ..

运行方式

命令行参数

python3 mcp_kali_server.py [--host addr:port] [-t PASSWORD]

参数

默认值

说明

--host <addr:port>

0.0.0.0:8000

服务监听地址与端口

-t, --token <password>

连接密码;不传则禁用认证(仅建议本地调试)

启动示例

# 先激活虚拟环境
source venv/bin/activate

# 1. 本地调试(无认证,仅监听本机)
python3 mcp_kali_server.py --host 127.0.0.1:8000

# 2. 局域网开放 + 密码认证(推荐)
python3 mcp_kali_server.py --host 0.0.0.0:8000 -t MySecretPass123

# 3. 自定义端口
python3 mcp_kali_server.py --host 0.0.0.0:9000 -t MySecretPass123

# 4. 查看帮助
python3 mcp_kali_server.py --help

启动成功后会输出:

INFO - === Kali-MCP Server Starting (Root Mode) ===
INFO - Node.js version: v18.x.x
INFO - PTY Engine started successfully
INFO - 密码认证已启用
INFO - Kali-MCP Server ready
INFO - Uvicorn running on http://0.0.0.0:8000

未启用密码时会出现警告:

WARNING - 认证已禁用,仅建议本地调试使用

环境变量

变量名

默认值

说明

KALI_QUEUE_SIZE

2000

每个会话输出队列容量,超出时丢弃最旧数据。高频输出场景可调大

# 示例:放大输出队列到 10000
KALI_QUEUE_SIZE=10000 python3 mcp_kali_server.py -t MyPass

后台运行(生产环境)

推荐用 systemdscreen/tmux 托管:

# 使用 nohup 简单后台运行
nohup python3 mcp_kali_server.py --host 0.0.0.0:8000 -t MySecretPass123 > /dev/null 2>&1 &

# 或使用 systemd(推荐)
cat > /etc/systemd/system/kali-mcp.service <<'EOF'
[Unit]
Description=Kali-MCP Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/kali-mcp
ExecStart=/usr/bin/python3 /opt/kali-mcp/mcp_kali_server.py --host 0.0.0.0:8000 -t MySecretPass123
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now kali-mcp

日志位置

日志写入 <项目目录>/logs/mcp.log,同时输出到 stdout。日志文件通过后台线程异步写入,不阻塞事件循环。

AI 客户端配置

服务端启动后,SSE 端点为 http://<host>:<port>/sse。各客户端配置方式如下:

Claude Desktop

编辑配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "kali-terminal": {
      "url": "http://192.168.1.100:8000/sse",
      "headers": {
        "X-Kali-Token": "MySecretPass123"
      }
    }
  }
}

192.168.1.100 替换为 Kali 主机实际 IP。若服务端未启用密码认证(未传 -t),可省略 headers 字段。

Cursor

进入 Settings → MCP → Add new MCP Server,或编辑 ~/.cursor/mcp.json

{
  "mcpServers": {
    "kali-terminal": {
      "url": "http://192.168.1.100:8000/sse",
      "headers": {
        "X-Kali-Token": "MySecretPass123"
      }
    }
  }
}

Cline (VS Code)

编辑 ~/.cline/mcp_settings.json

{
  "mcpServers": {
    "kali-terminal": {
      "url": "http://192.168.1.100:8000/sse?token=MySecretPass123"
    }
  }
}

不支持自定义 Header 的客户端可改用查询参数 ?token= 传递密码,两种方式等价。

通用验证(curl)

配置客户端前,可用 curl 验证服务是否正常:

# 无密码模式
curl -N http://127.0.0.1:8000/sse

# Header 方式认证
curl -N -H "X-Kali-Token: MySecretPass123" http://192.168.1.100:8000/sse

# 查询参数方式认证
curl -N "http://192.168.1.100:8000/sse?token=MySecretPass123"

# 错误密码测试(应返回 401)
curl -i -H "X-Kali-Token: wrong" http://192.168.1.100:8000/sse

成功时会收到 SSE 事件流(event: endpoint 等),失败返回 HTTP/1.1 401 Unauthorized

MCP 工具说明

服务端暴露以下 9 个 MCP 工具,AI 客户端可按需调用:

会话管理

工具

参数

说明

create_session

session_id (必填), shell (默认 /bin/bash), cwd (默认 /root), rows, cols, tag

创建新的终端会话

list_sessions

列出所有活跃会话及其状态、PID、空闲时长

close_session

session_id

关闭并销毁指定会话

resize_session

session_id, rows, cols

调整终端尺寸

命令执行

工具

参数

说明

send_line

session_id, line

发送一行命令(自动加回车),经过安全审查

send_input

session_id, text

发送原始文本(不加回车,用于交互式输入)

send_control

session_id, key

发送控制键:c/d/z/up/down/left/right/tab/esc/enter/backspace

输出读取

工具

参数

说明

read_output

session_id, timeout (默认 1.0s), lines (默认 0=全部), raw (默认 false)

读取会话输出,默认剥离 ANSI 转义

wait_for

session_id, pattern (正则), timeout (默认 60s), case_sensitive

阻塞等待输出中出现匹配模式

get_screen

session_id

获取当前终端屏幕快照与光标位置

MCP 资源

  • sessions://current — 以纯文本形式返回当前所有活跃会话概览

典型调用流程

AI 客户端的典型工作流:

1. create_session(session_id="shell-1")          # 创建会话
2. send_line(session_id="shell-1", line="ls -la") # 执行命令
3. read_output(session_id="shell-1")              # 读取结果
4. send_line(session_id="shell-1", line="nmap -sV 192.168.1.0/24")
5. wait_for(session_id="shell-1", pattern="Nmap done", timeout=300)
6. read_output(session_id="shell-1", lines=100)
7. close_session(session_id="shell-1")             # 清理

安全说明

命令安全审查

send_line 会经过 SecurityPolicy 审查,以下命令会被拦截并抛出 PermissionError

  • 危险正则:rm -rf /dd if=/dev/zeromkfs.*chmod 777 /、fork bomb :(){ :|:& };:

  • 禁止命令:shutdownreboothaltkill -9pkillkillallfdisk

  • 管道命令会递归检查每个子命令

send_input 不经过安全审查(用于交互式输入如 sudo 密码),请谨慎使用。

密码认证机制

  • 密码使用 PBKDF2-HMAC-SHA256 加盐哈希,10 万次迭代

  • 内存中仅保留 salt + hash_hex不明文存储密码

  • 校验使用 hmac.compare_digest 常量时间比较,防时序攻击

  • 认证失败返回 HTTP 401,日志仅记录客户端 IP,不记录密码值

网络安全建议

  1. 生产环境务必启用密码-t <强密码>

  2. 配合防火墙:仅允许可信 IP 访问 8000 端口

  3. 使用反向代理 + HTTPS:通过 Nginx 加密 SSE 流,避免密码明文传输

  4. 不要暴露到公网:如必须公网访问,务必启用 HTTPS

Nginx 反向代理示例(HTTPS 加密)

server {
    listen 443 ssl;
    server_name kali.example.com;

    ssl_certificate     /etc/ssl/certs/kali.pem;
    ssl_certificate_key /etc/ssl/private/kali.key;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;           # SSE 必须关闭缓冲
        proxy_read_timeout 86400s;     # 长连接超时
        proxy_set_header Host $host;
    }
}

客户端配置改为 https://kali.example.com/sse

故障排查

启动失败

报错

原因与解决

Node.js not installed

未安装 Node.js,执行 apt install -y nodejs

PTY engine script not found

pty_engine/index.js 不存在,确认在项目目录下启动

PTY Engine startup timeout

Node.js 启动超时,检查 node-pty 是否安装成功(重新 npm install

无效的 --host 格式

--host 参数缺少冒号或端口非数字,格式应为 addr:port

端口 xxx 越界

端口需在 1-65535 范围内

ModuleNotFoundError: No module named 'mcp'

Python 依赖未装,执行 pip install -r requirements.txt

ModuleNotFoundError: No module named 'mcp.server.fastmcp'

装到了 MCP SDK v2.x(默认)。v2 已移除 fastmcp。需降级到 v1.x:pip install "mcp>=1.28,<2"

客户端连接失败

现象

原因与解决

401 Unauthorized

密码错误或未传 X-Kali-Token;确认服务端启用了 -t 且密码一致

连接超时

防火墙未放行端口;检查 Kali 主机 iptables / ufw

SSE 流立即断开

中间代理缓冲了流,Nginx 需设置 proxy_buffering off

工具调用无响应

会话已终止或 PID 不存在,调用 list_sessions 确认状态

查看日志

# 实时查看服务日志
tail -f logs/mcp.log

# 查看认证失败记录
grep "认证失败" logs/mcp.log

# 查看 PTY 引擎输出
grep "\[PTY-Engine\]" logs/mcp.log

重新安装 PTY 引擎

node-pty 原生模块损坏(升级 Node.js 后常见):

cd pty_engine
rm -rf node_modules package-lock.json
npm install

性能特性

  • 异步日志:文件日志通过后台线程异步写入,不阻塞事件循环

  • 输出队列限流:每会话默认 2000 条缓冲,超出丢弃最旧并警告(可通过 KALI_QUEUE_SIZE 调整)

  • 尾部缓冲匹配wait_for 维护 10000 字节尾部缓冲,避免每次全量拼接历史

  • PTY 引擎自动重启:Node.js 子进程崩溃时自动重启并清理悬挂请求

  • 空闲会话清理:超过 1 小时未活动的会话自动关闭

项目结构

kali-mcp/
├── mcp_kali_server.py      # Python 主控服务器(入口)
├── requirements.txt        # Python 依赖
├── pty_engine/
│   ├── index.js            # Node.js PTY 引擎
│   ├── package.json        # Node.js 依赖
│   └── package-lock.json
├── venv/                   # 部署时手动创建
└── logs/                   # 运行时自动创建
    └── mcp.log

许可证

本项目仅供合法的安全研究、教学与授权测试使用。使用者需自行遵守所在地区的法律法规,作者不对任何滥用行为承担责任。

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    -
    maintenance
    Connects MCP clients to a Kali Linux terminal API, enabling AI-assisted penetration testing, CTF challenge solving, and automated security reconnaissance through command execution.
    1
  • A
    license
    -
    quality
    C
    maintenance
    Connects MCP clients to a Kali Linux terminal for AI-assisted penetration testing and CTF challenge solving by executing commands like Nmap, Metasploit, and custom scripts.
    794
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    Enables AI-assisted penetration testing by connecting MCP clients to execute terminal commands on a Kali Linux machine, supporting tools like Nmap, Metasploit, and custom commands.
    MIT

View all related MCP servers

Related MCP Connectors

  • Give AI agents secure access to ZERNO project briefs, tasks, and context over remote MCP.

  • A paid remote MCP for AI agent browser MCP session, built to return verdicts, receipts, usage logs,

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lzy1111xoy/kali-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server