运维养龙虾--使用腾讯workbuddy部署ssh-mcp-server允许通过 MCP 协议远程执行 SSH 命令

张开发
2026/5/7 7:04:27 15 分钟阅读

分享文章

运维养龙虾--使用腾讯workbuddy部署ssh-mcp-server允许通过 MCP 协议远程执行 SSH 命令
基于 SSH 的 MCP (Model Context Protocol) 服务器允许通过 MCP 协议远程执行 SSH 命令。 项目介绍ssh-mcp-server 是一个桥接工具可以让 AI 助手等支持 MCP 协议的应用通过标准化接口执行远程 SSH 命令。这使得 AI 助手能够安全地操作远程服务器执行命令并获取结果而无需直接暴露 SSH 凭据给 AI 模型。✨ 功能亮点 安全连接支持多种安全的 SSH 连接方式包括密码认证和私钥认证支持带密码的私钥️ 命令安全控制通过灵活的黑白名单机制精确控制允许执行的命令范围防止危险操作 标准化接口符合 MCP 协议规范与支持该协议的 AI 助手无缝集成 文件传输支持双向文件传输功能可上传本地文件到服务器或从服务器下载文件 凭据隔离SSH 凭据完全在本地管理不会暴露给 AI 模型增强安全性 即用即走使用 NPX 可直接运行无需全局安装方便快捷 开源仓库GitHubhttps://github.com/classfang/ssh-mcp-serverNPM: https://www.npmjs.com/package/fangjunjie/ssh-mcp-server️ 工具列表工具名称描述execute-command命令执行工具在远程服务器上执行 SSH 命令并获取执行结果upload文件上传工具将本地文件上传到远程服务器指定位置download文件下载工具从远程服务器下载文件到本地指定位置list-servers服务器列表工具列出所有可用SSH服务器配置 使用方法 MCP 配置示例⚠️ 重要提示: 在 MCP 配置文件中每个命令行参数和其值必须是args数组中的独立元素。不要用空格将它们连接在一起。例如使用--host, 192.168.1.1而不是--host 192.168.1.1。⚙️ 命令行选项选项: --config-file JSON 配置文件路径推荐用于多服务器配置 --ssh-config-file SSH 配置文件路径默认: ~/.ssh/config --ssh SSH 连接配置可以是 JSON 字符串或旧格式 -h, --host SSH 服务器主机地址或 SSH 配置中的别名 -p, --port SSH 服务器端口 -u, --username SSH 用户名 -w, --password SSH 密码 -k, --privateKey SSH 私钥文件路径 -P, --passphrase 私钥密码如果有的话 -W, --whitelist 命令白名单以逗号分隔的正则表达式 -B, --blacklist 命令黑名单,以逗号分隔的正则表达式 -s, --socksProxy SOCKS 代理地址 (e.g., socks://user:passwordhost:port) --pty 为命令执行分配伪终端 (默认: true) --pre-connect 启动时预连接所有配置的 SSH 服务器 使用密码{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.1.1, --port, 22, --username, root, --password, pwd123456 ] } } } 使用私钥{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.1.1, --port, 22, --username, root, --privateKey, ~/.ssh/id_rsa ] } } } 使用带密码私钥{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.1.1, --port, 22, --username, root, --privateKey, ~/.ssh/id_rsa, --passphrase, pwd123456 ] } } } 使用 ~/.ssh/config你可以使用~/.ssh/config文件中定义的主机别名。服务器会自动从 SSH 配置中读取连接参数{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, myserver ] } } }假设你的~/.ssh/config包含Host myserver HostName 192.168.1.1 Port 22 User root IdentityFile ~/.ssh/id_rsa你也可以指定自定义的 SSH 配置文件路径{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, myserver, --ssh-config-file, /path/to/custom/ssh_config ] } } }注意命令行参数优先级高于 SSH 配置值。例如如果你指定了--port 2222它会覆盖 SSH 配置中的端口。 使用 SOCKS 代理{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.1.1, --port, 22, --username, root, --password, pwd123456, --socksProxy, socks://username:passwordproxy-host:proxy-port ] } } } 使用命令白名单和黑名单使用--whitelist和--blacklist参数可以限制可执行的命令范围多个模式之间用逗号分隔。每个模式都是一个正则表达式用于匹配命令。示例使用命令白名单{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.1.1, --port, 22, --username, root, --password, pwd123456, --whitelist, ^ls( .*)?,^cat .*,^df.* ] } } }示例使用命令黑名单{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.1.1, --port, 22, --username, root, --password, pwd123456, --blacklist, ^rm .*,^shutdown.*,^reboot.* ] } } }注意如果同时指定了白名单和黑名单系统会先检查命令是否在白名单中然后再检查是否在黑名单中。命令必须同时通过两项检查才能被执行。 多SSH连接用法示例有三种方式可以配置多个 SSH 连接 方式一使用配置文件推荐创建 JSON 配置文件例如ssh-config.json数组格式[ { name: dev, host: 1.2.3.4, port: 22, username: alice, password: {abcP100s0}, socksProxy: socks://127.0.0.1:10808 }, { name: prod, host: 5.6.7.8, port: 22, username: bob, password: yyy, socksProxy: socks://127.0.0.1:10808 } ]对象格式{ dev: { host: 1.2.3.4, port: 22, username: alice, password: {abcP100s0}, socksProxy: socks://127.0.0.1:10808 }, prod: { host: 5.6.7.8, port: 22, username: bob, password: yyy, socksProxy: socks://127.0.0.1:10808 } }然后使用--config-file参数{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --config-file, ssh-config.json ] } } } 方式二使用 JSON 格式的 --ssh 参数可以直接传递 JSON 格式的配置字符串{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --ssh, {\name\:\dev\,\host\:\1.2.3.4\,\port\:22,\username\:\alice\,\password\:\{abcP100s0}\,\socksProxy\:\socks://127.0.0.1:10808\}, --ssh, {\name\:\prod\,\host\:\5.6.7.8\,\port\:22,\username\:\bob\,\password\:\yyy\,\socksProxy\:\socks://127.0.0.1:10808\} ] } } } 方式三旧格式逗号分隔向后兼容对于密码中不包含特殊字符的简单情况仍可使用旧格式npx fangjunjie/ssh-mcp-server \ --ssh namedev,host1.2.3.4,port22,useralice,passwordxxx \ --ssh nameprod,host5.6.7.8,port22,userbob,passwordyyy⚠️ 注意旧格式在处理包含特殊字符如、,、{、}的密码时可能会有问题。如果密码包含特殊字符请使用方式一或方式二。在MCP工具调用时通过connectionName参数指定目标连接名称未指定时使用默认连接。示例在prod连接上执行命令{ tool: execute-command, params: { cmdString: ls -al, connectionName: prod } }示例带超时选项的命令执行{ tool: execute-command, params: { cmdString: ping -c 10 127.0.0.1, connectionName: prod, timeout: 5000 } }⏱️ 命令执行超时execute-command工具支持超时选项防止命令无限期挂起timeout: 命令执行超时时间毫秒可选默认为30000ms这对于像ping、tail -f或其他可能阻塞执行的长时间运行进程特别有用。️ 列出所有SSH服务器可以通过MCP工具list-servers获取所有可用的SSH服务器配置调用示例{ tool: list-servers, params: {} }返回示例[ { name: dev, host: 1.2.3.4, port: 22, username: alice }, { name: prod, host: 5.6.7.8, port: 22, username: bob } ]️ 安全注意事项该服务器提供了在远程服务器上执行命令和传输文件的强大功能。为确保安全使用请注意以下几点命令白名单强烈建议使用--whitelist选项来限制可执行的命令集合。如果没有白名单任何命令都可以在远程服务器上执行这可能带来重大的安全风险。私钥安全服务器会将 SSH 私钥读入内存。请确保运行ssh-mcp-server的机器是安全的。不要将服务器暴露给不受信任的网络。拒绝服务攻击 (DoS)服务器没有内置的速率限制。攻击者可能通过向服务器发送大量连接请求或大文件传输来发起 DoS 攻击。建议在具有速率限制功能的防火墙或反向代理后面运行服务器。路径遍历服务器内置了对本地文件系统路径遍历攻击的保护。但是仍然需要注意在upload和download命令中使用的路径。 演示️ Cursor 接入️workbuddy接入ssh-mcp-server填入如下内容密码根据实际情况修改{ mcpServers: { ssh-mcp-server: { command: npx, args: [ -y, fangjunjie/ssh-mcp-server, --host, 192.168.44.129, --port, 22, --username, root, --password, pwd123456, --blacklist, ^rm .*,^shutdown.*,^reboot.* ] } } }告诉AI你要干什么例如登录192.168.44.129查看磁盘使用率和负载情况输出为md格式查看生成的报告服务器状态报告主机地址192.168.44.129采集时间2026-03-22 22:32:40系统运行时长已运行 1 天 12 小时 24 分钟登录用户数4 人一、系统负载指标值1 分钟平均负载0.275 分钟平均负载0.1315 分钟平均负载0.12CPU 核心数2总进程数254运行中进程1睡眠进程253僵尸进程0评估当前 1 分钟负载为 0.27CPU 核心数为 2负载比值约0.14整体负载较低系统运行平稳。二、CPU 使用情况类型占比用户态 (us)47.1%内核态 (sy)38.1%空闲 (id)0.0%硬件中断 (hi)11.6%软件中断 (si)3.2%I/O 等待 (wa)0.0%⚠️注意CPU 空闲率为 0%用户态 内核态占用超过 85%CPU 使用率偏高建议关注具体进程。三、内存使用情况类型总量已用空闲缓存/缓冲可用物理内存7.7 GiB1.1 GiB3.8 GiB3.2 GiB6.6 GiBSwap4.0 GiB0 B4.0 GiB——✅评估内存使用约14.3%Swap 未使用内存资源充裕。四、磁盘使用情况文件系统总大小已用可用使用率挂载点/dev/mapper/rlm_rocky-root35 G4.7 G31 G14%//dev/nvme0n1p1960 M217 M744 M23%/bootdevtmpfs4.0 M04.0 M0%/devtmpfs3.9 G03.9 G0%/dev/shmtmpfs1.6 G9.1 M1.6 G1%/runtmpfs791 M0791 M0%/run/user/0✅评估根分区使用率仅14%/boot 分区使用率23%磁盘空间充足无告警风险。五、整体健康摘要项目状态说明系统负载✅ 正常负载比值 0.14远低于警戒线1.0CPU 使用率⚠️ 偏高空闲率 0%建议排查高占用进程内存使用✅ 正常使用率约 14.3%Swap 未启用磁盘空间✅ 正常根分区剩余 31G使用率 14%报告由 WorkBuddy 自动生成执行黑名单的命令使用飞书机器人操作linux服务器

更多文章