整体流程梳理
- 本地 PC 发起反向 SSH 隧道,打通外网服务器端口 ↔ 内网网关 SSH
- 验证隧道连通性,配置 SSH 免密登录
- Claude MCP 接入 SSH 远程服务器,实现远程命令执行
- 额外接入 Playwright MCP,附带浏览器自动化能力
- 主要是排查web错误,然后自动修改js,修复bug
环境准备
组网环境
| 设备 | IP 地址 | 说明 |
|---|---|---|
| 远端服务器 | 172.16.13.128 | 反向隧道服务端 |
| 本地 PC | 网卡 1:172.16.13.31;网卡 2:192.168.0.99 | 双网卡发起隧道 |
| 内网网关 | 192.168.0.8:22 | 目标被 SSH 访问机器 |
网络拓扑
建立 SSH 反向远程端口转发隧道
隧道启动命令说明
本地 PC 执行,将远端服务器172.16.13.128的 10400 端口反向映射到内网网关192.168.0.8:22
ini
ssh -R 10400:192.168.0.8:22 -N -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o StrictHostKeyChecking=no lbt@172.16.13.128
参数解释:
-R 10400:192.168.0.8:22:远端机器监听 10400 端口,流量转发至内网网关 22 端口-N:仅建立隧道,不打开远程 Shell 终端- 心跳保活:30s 发送一次心跳,连续 3 次失败自动断开重连
StrictHostKeyChecking=no:首次连接自动信任主机密钥,无需交互确认
隧道连通性验证
在服务器上验证执行,通过隧道访问内网网关 SSH:
css
ssh -p 10400 root@127.0.0.1 'echo tunnel_ok && uname -a'
输出tunnel_ok+ 系统内核信息即代表隧道通畅。
免密 SSH 密钥推送
把本地公钥推送至隧道后的网关 root 账号,后续 MCP 免密登录:
css
ssh-copy-id -p 10400 root@127.0.0.1
Claude MCP 服务配置
安装ssh-mcp-server
配置 SSH MCP 服务(已安装了ssh-mcp-server,未安装请跳过)
如果已经安装了ssh-mcp-server,可直接粘贴至 Claude MCP 配置文件:
perl
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "127.0.0.1",
"--port", "10400",
"--username", "root",
"--privateKey", "~/.ssh/id_ed25519",
"--pre-connect"
]
}
}
}
参数说明:
--host / --port:隧道本地映射地址与端口--username:目标网关 SSH 登录账号 root--privateKey:本地 ed25519 私钥绝对路径,免密认证--pre-connect:启动 MCP 前预先建立 SSH 连接
命令行一键添加 SSH MCP 服务
json
claude mcp add-json ssh-mcp-server '{"command":"npx","args":["-y","@fangjunjie/ssh-mcp-server","--host","127.0.0.1","--port","10400","--username","root","--privateKey","/home/lbt/.ssh/id_ed25519","--pre-connect"]}'
安装 Playwright MCP(浏览器自动化)
perl
claude mcp add playwright -- npx @playwright/mcp@latest --headless --no-sandbox
--headless:无头模式运行浏览器,无 GUI 窗口--no-sandbox:关闭沙箱,容器 / 服务器环境必备参数
由于pc 和网关没有路由,需要使用playwright的时候,需要在PC电脑上安装nginx代理 ,nginx.conf代码块
ini
server {
listen 19090;
server_name localhost;
# 现代 Nginx 核心对策:防止 Nginx 自动补全为 80 端口
absolute_redirect off;
location / {
proxy_pass http://192.168.0.8/;
# 只要这一行,自动搞定 99% 的重定向端口丢失问题
proxy_redirect default;
# 用 $http_host 动态获取客户端的"域名+19090端口",优雅且不会写死
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cookie_path / "/; SameSite=Lax";
}
}
mcp安装验证
claude mcp list
测试验证(实际场景用到)
Playwright截图步骤(用于web 错误排查)
自然语言提问:
打开http://172.16.13.31:19090/auth/输入admin/admin ,点击登录 ,然后 Edge2Cloud → E2C Modbus → Terminal,点击 Setting 后截图
执行结果如下:
- 打开
http://172.16.13.31:19090/auth/,用 admin/admin 登录成功 - 依次点进 Edge2Cloud → E2C Modbus → Terminal 标签页
- 点击 Setting 区块标题将其收起
- 全页截图已保存:e2c-modbus-terminal-setting-collapsed.png
ssh-mcp-server 这个主要是操作网关上的任意文件,譬如查看读写,内容比较简单忽略
运维与排错指南
MCP 服务管理常用命令
csharp
# 查看已添加MCP服务列表
claude mcp list
# 重启SSH MCP服务
claude mcp restart ssh-mcp-server
# 删除异常MCP服务
claude mcp remove ssh-mcp-server