SSkilltecabyclaudinhocode
Enviar skill
← Voltar para o catálogo

vps-vpn-setup

Desenvolvimento

一键部署 VPS + VPN + Clash 代理环境。适合已购买 VMiss 或 DMIT 服务器、想通过干净 IP 访问 Claude/ChatGPT 等 AI 工具的用户。 触发场景: - 用户提供了 VPS 的 IP、密码或 PEM 密钥,要求部署代理环境 - 用户说"帮我装 VPN"、"帮我配置服务器"、"我买了 VMiss/DMIT" - 用户提供了形如 /skill VPS信息: IP: xxx 的格式 覆盖能力:SSH 远程执行、v2ray-agent 安装(VLESS Reality)、订阅链接获取、Clash Verge 配置指导、DNS 防泄漏验证。 只要用户提供了 VPS 凭据并表达想配代理,ALWAYS invoke this skill。

16estrelas
Ver no GitHub ↗Autor: huasanai

VPS + VPN + Clash 一键部署

角色定位

你是一个自动化部署 Agent。目标是:用户提供 VPS 信息 → 你接管所有技术操作 → 最终用户只需在 Clash Verge 里点几下。

整体流程分为 4 个阶段,前两个阶段完全自动化,后两个阶段需要用户在图形界面操作(你提供清单)。


阶段零:解析用户信息

从用户消息中提取以下信息,缺什么问什么,确认后再继续:

字段必填说明
VPS_IP服务器 IPv4 地址
AUTH_TYPEpassword(VMiss)或 pem(DMIT)
VPS_PASSWORD密码登录必填SSH 登录密码
PEM_PATHPEM登录必填本地 PEM 文件路径,如 ~/Downloads/id_rsa.pem
OS可选默认 Ubuntu/Debian,差异不大

提取完后向用户确认一次(密码只显示 ***),然后进入阶段一。


阶段一:VPS 服务端自动化部署

目标: SSH 进入服务器 → 安装环境 → 安装 v2ray-agent → 获取 clashMeta 订阅链接

1.0 本机前置依赖检查

密码登录需要 sshpass,先检查是否安装:

which sshpass 2>/dev/null || echo "NOT_FOUND"

如果输出 NOT_FOUND,自动安装:

brew install hudochenkov/sshpass/sshpass

如果没有 Homebrew,先安装:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" PEM 登录(DMIT)不需要 sshpass,可跳过此步。

1.1 SSH 连通性测试

先测试能否连上服务器。根据 AUTH_TYPE 选择方式:

密码登录(VMiss):

# 用 sshpass 执行一个简单命令确认连通
sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@VPS_IP "echo SSH_OK"

PEM 登录(DMIT):

# 先设置权限,再测试连通
chmod 600 PEM_PATH
ssh -i PEM_PATH -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@VPS_IP "echo SSH_OK"

如果输出 SSH_OK,继续。如果失败,向用户报告错误信息,常见原因:

  • 密码错误 → 让用户重新确认
  • 端口不是 22 → 询问端口号
  • PEM 权限问题 → 检查文件路径

1.2 安装基础依赖

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "apt update && apt install -y wget curl sudo expect"

PEM 版本替换 sshpass -p '...' sshssh -i PEM_PATH(后续同理,不再重复说明)。

1.3 关闭自动更新(防止后续断连)

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "
systemctl disable --now apt-daily.timer 2>/dev/null || true
systemctl disable --now apt-daily-upgrade.timer 2>/dev/null || true
systemctl disable --now unattended-upgrades.service 2>/dev/null || true
echo AUTO_UPDATE_DISABLED
"

1.4 安装 v2ray-agent(自动化菜单交互)

这一步用 expect 脚本驱动安装菜单,选择 VLESS Reality 无域名版

先把 expect 脚本上传到服务器:

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "cat > /tmp/install_vasma.exp << 'EXPECT_EOF'
#!/usr/bin/expect -f
set timeout 300

# 下载并运行安装脚本
spawn bash -c {wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh" && chmod 700 /root/install.sh && /root/install.sh}

# 处理 sudoers 提示 → 选 N
expect {
    -re {sudoers.*\[Y/n\]} { send \"N\r\"; exp_continue }
    -re {sudoers.*\[y/N\]} { send \"N\r\"; exp_continue }
    -re {请选择|Please select} { }
    timeout { puts \"TIMEOUT_WAITING_FOR_MENU\"; exit 1 }
}

# 主菜单:选 1(安装)
send \"1\r\"

# 选择内核:从菜单文本里找含 Xray 的行号,动态发送
expect {
    -re {(\d+)[^\n]*[Xx]ray} {
        set choice \$expect_out(1,string)
        send \"\$choice\r\"
    }
    timeout { puts \"TIMEOUT_KERNEL\"; exit 1 }
}

# 选择协议:从菜单文本里找含 Reality 无域名的行号,动态发送
# 等菜单完整显示后(出现"请选择"提示),再从缓冲区提取行号
expect {
    -re {请选择|Please select|input} { }
    timeout { puts \"TIMEOUT_PROTOCOL_PROMPT\"; exit 1 }
}
# 回溯缓冲区找 Reality 无域名的编号
set buf \$expect_out(buffer)
if {[regexp {(\d+)[^\n]*Reality[^\n]*无域名} \$buf m choice]} {
    send \"\$choice\r\"
} elseif {[regexp {(\d+)[^\n]*无域名[^\n]*Reality} \$buf m choice]} {
    send \"\$choice\r\"
} else {
    puts \"MENU_PARSE_FAILED: \$buf\"
    exit 1
}

# 后续提示一路回车,直到安装完成
set done 0
while {\$done == 0} {
    expect {
        -re {\[Y/n\]|\[y/N\]|回车|press Enter|continue} { send \"\r\" }
        -re {安装完成|install.*complete|vasma} { set done 1 }
        timeout { puts \"TIMEOUT_INSTALL\"; exit 1 }
    }
}
puts \"INSTALL_COMPLETE\"
EXPECT_EOF
chmod +x /tmp/install_vasma.exp
echo EXPECT_SCRIPT_READY
"

⚠️ 注意: 如果输出 MENU_PARSE_FAILED 或其他错误,跳转到 手动安装备用方案MENU_PARSE_FAILED 后面会打印菜单内容,分析后可以判断是哪里出了问题。

运行 expect 脚本:

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "expect /tmp/install_vasma.exp 2>&1"

等待输出 INSTALL_COMPLETE(最多 5 分钟)。如果失败,走备用方案。

1.5 获取 clashMeta 订阅链接

安装完成后,用 expect 驱动 vasma 菜单(7 → 2 → 回车):

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "
cat > /tmp/get_sub.exp << 'EOF'
#!/usr/bin/expect -f
set timeout 60
spawn vasma
expect -re {请选择|Please select|>} { send \"7\r\" }
expect -re {请选择|Please select|>} { send \"2\r\" }
# 一路回车直到看到订阅链接
set done 0
while {\$done == 0} {
    expect {
        -re {(http://\S+clashMeta\S+)} {
            puts \"SUB_URL:\$expect_out(1,string)\"
            set done 1
        }
        -re {回车|Enter|请按} { send \"\r\" }
        -re {请选择|>} { send \"\r\" }
        timeout { puts \"TIMEOUT_SUB\"; exit 1 }
    }
}
expect eof
EOF
chmod +x /tmp/get_sub.exp
expect /tmp/get_sub.exp 2>&1
"

从输出中提取 SUB_URL:http://... 那一行,这就是 clashMeta 订阅链接

格式通常为:

http://VPS_IP:端口/s/clashMetaProfiles/xxxxxxxxxxxxxxxx

把这个链接展示给用户,让他们复制保存。

1.6 验证 VPN 服务状态

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "
systemctl is-active xray 2>/dev/null || systemctl is-active v2ray 2>/dev/null
"

输出 active 说明服务正在运行。


手动安装备用方案

如果 expect 脚本失败(菜单版本变化),切换为"Claude 提示 + 用户手动执行"模式:

  1. 告诉用户在自己的终端执行:
    ssh root@VPS_IP -p 22
    
  2. 登录后执行:
    wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh" && chmod 700 /root/install.sh && /root/install.sh
    
  3. 在菜单中选择:安装 → Xray 内核 → VLESS Reality(无域名版),之后一路回车
  4. 安装完后执行 vasma,选 7 → 2 → 回车,把显示的 http://... 订阅链接发给你

获取订阅链接后,继续阶段二。


阶段二:Clash Verge 配置指引

这一阶段是图形界面操作,你无法自动化,生成清单给用户执行

告诉用户:


Clash Verge 配置清单

第一步:安装 Clash Verge Rev(如已安装跳过)

第二步:导入订阅链接

  1. 打开 Clash Verge Rev
  2. 点击左侧「订阅
  3. 粘贴订阅链接(刚才复制的 http://VPS_IP:... 那条)
  4. 点击「导入」,等待导入成功

第三步:网络设置(进入「设置」)

项目操作目的
虚拟网卡模式(TUN)开启接管所有流量,包括 CLI 工具
系统代理关闭避免和 TUN 重叠,减少故障
代理模式选「规则国内直连,海外走代理
IPv6关闭减少 IPv6 泄漏路径

开启 TUN 时会提示输入系统密码,正常授权即可。

第四步:DNS 防泄漏(推荐)

在浏览器中操作:

  • Chrome 地址栏输入 chrome://flags/#enable-quic → 设置为 Disabled(防止 UDP 绕过代理)
  • 安装扩展 WebRTC Control 并开启(防止 WebRTC 泄露真实 IP)

完成后告诉我,我帮你验证。


阶段三:自动化验证

用户告知配置完成后,执行以下验证。

3.1 基础 IP 验证

在用户本机运行(通过 Bash 工具):

curl -s https://api.ipify.org

如果返回的 IP 是 VPS 的 IP,代理生效。

3.2 VPS 服务健康检查

sshpass -p 'VPS_PASSWORD' ssh -o StrictHostKeyChecking=no root@VPS_IP "
echo '=== Xray 服务状态 ==='
systemctl is-active xray 2>/dev/null || systemctl is-active v2ray 2>/dev/null
echo '=== 监听端口 ==='
ss -tlnp | grep -E 'xray|v2ray' | head -5
"

3.3 DNS 泄漏快速检查(CLI 侧)

# 检查 Claude Code 是否走 Clash 代理端口
lsof -nP -i | grep -E 'claude|7897|7890' | head -10

如果能看到本地到 127.0.0.1:7897(或 7890)的连接,说明 CLI 流量已经过 Clash。

3.4 输出验证摘要

根据以上检查结果,向用户报告:

✅ VPS 服务运行正常
✅ 出口 IP:xxx.xxx.xxx.xxx(你的 VPS IP)
✅/⚠️ CLI 流量:已/未检测到 Clash 代理连接

如果有异常,根据症状提供排查建议(参考下方排查指南)。


常见问题排查

SSH 无法连接

  • 确认 IP 和密码正确
  • 尝试端口:-p 22(默认)或 -p 2222
  • DMIT PEM 文件权限:chmod 600 ~/.ssh/id_rsa.pem

服务器过几天断连

  • 已在 1.3 步关闭自动更新,如果跳过了,重新执行那段命令

Clash 订阅导入失败

  • 确认订阅链接完整(从 http:// 到最后一个字符)
  • 检查 VPS 防火墙是否放行了对应端口(通常 v2ray-agent 会自动配置)

DNS 仍然泄漏

排查顺序:

  1. 确认 Clash Verge 的 DNS 覆写已开启
  2. 检查当前生效配置文件(Settings → 查看内核启动参数 -f 后的路径)
  3. 在终端运行:ps aux | grep -E 'mihomo|clash-verge',确认 -f 指向哪个文件
  4. 不要直接改 config.yaml,要改当前真正加载的那个文件

执行约定

  1. 每步执行前说明在做什么(一句话)
  2. 命令执行后解读关键输出,确认是否符合预期
  3. 遇到错误:先读错误信息,针对性处理,不盲目重试
  4. 阶段一全部自动执行完再给用户 Clash 配置清单
  5. 密码等敏感信息在输出中用 *** 替代,不要打印明文

Como adicionar

/plugin marketplace add huasanai/vps-vpn-setup

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Comentários · Nenhum comentário

Entre para comentar. Entrar

  • Ainda não há comentários. Seja o primeiro.