【方案】解决Antigravity连接远程服务器无法AI对话(无sudo权限)
- 内容介绍
- 文章标签
- 相关推荐
解决 Antigravity 连接远程服务器 AI 聊天连接失败:graftcp + mihomo 方案(无sudo权限也可)
背景与问题描述
最近,我用 Antigravity 自带的ssh连远程 Linux 服务器开发,代码能跑,但 AI 对话死活连不上。更麻烦的是:我在服务器上没有 sudo 权限。最后我用“用户态代理 + graftcp 劫持 + wrapper 替换”的组合拳把它修好了。主要有以下三个问题:
- AI 聊天无法连接:提示
Cloud Code request timeout或Tools: Offline。 - 代理无效:即使服务器设置了
HTTP_PROXY,Antigravity 的核心进程(Go 编写)依然直连网络导致超时。 - 权限受限:在没有
sudo权限的实验室或学校服务器上,无法安装系统级代理工具。
本教程通过 mihomo (Clash Meta) 建立底层代理,配合 graftcp 进行系统调用级劫持,彻底打通 Antigravity 的联网链路。
准备工作:在用户目录下安装核心组件
由于没有 sudo 权限,我们将所有工具安装在 ~/(Home 目录)下。
1. 部署 mihomo (Clash Meta) 内核
mihomo 负责维护与订阅节点的连接。
- 下载与解压:从 Mihomo Releases 下载
mihomo-linux-amd64-compatible-v1.19.17。 - 创建目录结构:
mkdir -p ~/mihomo/data/proxy_providers
cd ~/mihomo
chmod +x mihomo-linux-amd64-compatible
- **编写
config.yaml**:
关键点:proxy-providers的path必须位于-d指定的目录内。
port: 7890
socks-port: 7891
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
proxy-providers:
subscription:
type: http
url: "你的订阅链接"
interval: 3600
path: ./subscription.yaml # 必须在 data 目录下
proxy-groups:
- name: PROXY
type: select
use: [subscription]
rules:
- GEOIP,CN,DIRECT
- MATCH,PROXY
- 后台启动:
nohup ./mihomo-linux-amd64-compatible -d ./data -f ./config.yaml > proxy.log 2>&1 &
2. 编译安装 graftcp
graftcp 能劫持 Go 程序的 TCP 连接,强制其走 SOCKS5 代理。
- 安装 Go 环境(若服务器没有新版 Go):
wget https://go.dev/dl/go1.24.7.linux-amd64.tar.gz
tar -xzf go1.24.7.linux-amd64.tar.gz -C ~
echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- 设置 Go 国内镜像并编译:
export GOPROXY=https://goproxy.cn,direct
wget https://github.com/hmgle/graftcp/archive/refs/tags/v0.7.1.tar.gz
tar -xzf v0.7.1.tar.gz && cd graftcp-0.7.1
make
核心步骤:劫持 Antigravity 核心进程
Antigravity 启动时会拉起 language_server_linux_x64。我们需要用一个脚本“包装”它。
1. 寻找当前运行的二进制路径
Antigravity 经常更新,会产生多个版本目录。通过进程命令确认当前路径:
ps -ef | grep language_server_linux_x64
假设路径为:~/.antigravity-server/bin/1.19.5-xxxx/extensions/antigravity/bin/
2. 替换为 Wrapper 脚本
- 备份原程序:
mv language_server_linux_x64 language_server_linux_x64.bak
- 创建劫持脚本:
创建新文件language_server_linux_x64,内容如下:
#!/usr/bin/env bash
GRAFTCP_DIR="$HOME/graftcp-0.7.1"
PROXY_SOCKS="127.0.0.1:7891"
# 自动启动 graftcp-local 监听器
if ! pgrep -f "graftcp-local" > /dev/null; then
nohup "$GRAFTCP_DIR/local/graftcp-local" -socks5 "$PROXY_SOCKS" -listen 127.0.0.1:2233 -select_proxy_mode only_socks5 > /dev/null 2>&1 &
sleep 0.5
fi
# 强制 Go 优化环境
export GODEBUG=netdns=cgo,http2client=0
# 执行原始程序
exec "$GRAFTCP_DIR/graftcp" -a 127.0.0.1 -p 2233 "$0.bak" "$@"
- 赋予权限:
chmod +x language_server_linux_x64
排查与验证
- 检查监听端口:
确保7891(mihomo) 和2233(graftcp-local) 都在 LISTEN 状态。
ss -lntp | grep -E '7891|2233'
- 强制重启服务:
修改完脚本后,必须杀掉旧进程,让 Antigravity 重新拉起:
pkill -f language_server_linux_x64
- 连接测试:
在服务器上测试 Cloud Code 接口连通性:
curl -I --socks5-hostname 127.0.0.1:7891 https://daily-cloudcode-pa.googleapis.com
只要返回 HTTP 状态码(如 404 或 200),而非 Timeout,说明代理链路已通。
踩坑总结与 Tips
- SSH 断连问题:开启本地 TUN 模式可能导致 SSH 路由冲突,触发
Software caused connection abort。建议在 SSH 客户端开启ServerAliveInterval 30或在代理软件中排除 SSH 端口。 - 版本更新:Antigravity 更新后会生成新的版本文件夹,导致原有的 Wrapper 失效。此时需要将脚本重新应用到新文件夹下的二进制文件。
- Ptrace 权限:若报错无法劫持,请检查
/proc/sys/kernel/yama/ptrace_scope。若为 1,确保 Wrapper 是通过父进程拉起的;若为 2/3 且无sudo权限,此方案可能失效。
刚看到一个老哥在问 正好前两天也遇到了,就总结一下发出来吧,
== 但是现在有个问题,不连续对话后过一会再聊天还是不行,需要重启应用或者重连,排查了很久也没排查出来 ==
—【求助】代理环境下 Google Code Assist OAuth 认证失败 + Antigravity remote-ssh 配置
网友解答:--【壹】--:
你这个情况就是跟没连上是一样的,重点关注一下 [quote=“jasonli, post:1, topic:1689627”]
language_server_linux_x64
[/quote]
这个改没改,运行没有 排查一下吧
--【贰】--:
感谢,终于是用上了,学校服务器都是没sudo的,按这个教程一次成功
--【叁】--:
image1465×387 23.7 KB
佬,我按你的方式配置了以后还是存在问题,对话时一直在工作但不输出
image966×207 2.89 KB
--【肆】--:
nice! 按照大佬的方法跑通了!
--【伍】--:
mark一下,之前因为反重力的网络限制太恶心,一直都没使用
--【陆】--:
非常的有用,谢谢大佬分享
--【柒】--:
强呀,大佬!
解决 Antigravity 连接远程服务器 AI 聊天连接失败:graftcp + mihomo 方案(无sudo权限也可)
背景与问题描述
最近,我用 Antigravity 自带的ssh连远程 Linux 服务器开发,代码能跑,但 AI 对话死活连不上。更麻烦的是:我在服务器上没有 sudo 权限。最后我用“用户态代理 + graftcp 劫持 + wrapper 替换”的组合拳把它修好了。主要有以下三个问题:
- AI 聊天无法连接:提示
Cloud Code request timeout或Tools: Offline。 - 代理无效:即使服务器设置了
HTTP_PROXY,Antigravity 的核心进程(Go 编写)依然直连网络导致超时。 - 权限受限:在没有
sudo权限的实验室或学校服务器上,无法安装系统级代理工具。
本教程通过 mihomo (Clash Meta) 建立底层代理,配合 graftcp 进行系统调用级劫持,彻底打通 Antigravity 的联网链路。
准备工作:在用户目录下安装核心组件
由于没有 sudo 权限,我们将所有工具安装在 ~/(Home 目录)下。
1. 部署 mihomo (Clash Meta) 内核
mihomo 负责维护与订阅节点的连接。
- 下载与解压:从 Mihomo Releases 下载
mihomo-linux-amd64-compatible-v1.19.17。 - 创建目录结构:
mkdir -p ~/mihomo/data/proxy_providers
cd ~/mihomo
chmod +x mihomo-linux-amd64-compatible
- **编写
config.yaml**:
关键点:proxy-providers的path必须位于-d指定的目录内。
port: 7890
socks-port: 7891
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
proxy-providers:
subscription:
type: http
url: "你的订阅链接"
interval: 3600
path: ./subscription.yaml # 必须在 data 目录下
proxy-groups:
- name: PROXY
type: select
use: [subscription]
rules:
- GEOIP,CN,DIRECT
- MATCH,PROXY
- 后台启动:
nohup ./mihomo-linux-amd64-compatible -d ./data -f ./config.yaml > proxy.log 2>&1 &
2. 编译安装 graftcp
graftcp 能劫持 Go 程序的 TCP 连接,强制其走 SOCKS5 代理。
- 安装 Go 环境(若服务器没有新版 Go):
wget https://go.dev/dl/go1.24.7.linux-amd64.tar.gz
tar -xzf go1.24.7.linux-amd64.tar.gz -C ~
echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- 设置 Go 国内镜像并编译:
export GOPROXY=https://goproxy.cn,direct
wget https://github.com/hmgle/graftcp/archive/refs/tags/v0.7.1.tar.gz
tar -xzf v0.7.1.tar.gz && cd graftcp-0.7.1
make
核心步骤:劫持 Antigravity 核心进程
Antigravity 启动时会拉起 language_server_linux_x64。我们需要用一个脚本“包装”它。
1. 寻找当前运行的二进制路径
Antigravity 经常更新,会产生多个版本目录。通过进程命令确认当前路径:
ps -ef | grep language_server_linux_x64
假设路径为:~/.antigravity-server/bin/1.19.5-xxxx/extensions/antigravity/bin/
2. 替换为 Wrapper 脚本
- 备份原程序:
mv language_server_linux_x64 language_server_linux_x64.bak
- 创建劫持脚本:
创建新文件language_server_linux_x64,内容如下:
#!/usr/bin/env bash
GRAFTCP_DIR="$HOME/graftcp-0.7.1"
PROXY_SOCKS="127.0.0.1:7891"
# 自动启动 graftcp-local 监听器
if ! pgrep -f "graftcp-local" > /dev/null; then
nohup "$GRAFTCP_DIR/local/graftcp-local" -socks5 "$PROXY_SOCKS" -listen 127.0.0.1:2233 -select_proxy_mode only_socks5 > /dev/null 2>&1 &
sleep 0.5
fi
# 强制 Go 优化环境
export GODEBUG=netdns=cgo,http2client=0
# 执行原始程序
exec "$GRAFTCP_DIR/graftcp" -a 127.0.0.1 -p 2233 "$0.bak" "$@"
- 赋予权限:
chmod +x language_server_linux_x64
排查与验证
- 检查监听端口:
确保7891(mihomo) 和2233(graftcp-local) 都在 LISTEN 状态。
ss -lntp | grep -E '7891|2233'
- 强制重启服务:
修改完脚本后,必须杀掉旧进程,让 Antigravity 重新拉起:
pkill -f language_server_linux_x64
- 连接测试:
在服务器上测试 Cloud Code 接口连通性:
curl -I --socks5-hostname 127.0.0.1:7891 https://daily-cloudcode-pa.googleapis.com
只要返回 HTTP 状态码(如 404 或 200),而非 Timeout,说明代理链路已通。
踩坑总结与 Tips
- SSH 断连问题:开启本地 TUN 模式可能导致 SSH 路由冲突,触发
Software caused connection abort。建议在 SSH 客户端开启ServerAliveInterval 30或在代理软件中排除 SSH 端口。 - 版本更新:Antigravity 更新后会生成新的版本文件夹,导致原有的 Wrapper 失效。此时需要将脚本重新应用到新文件夹下的二进制文件。
- Ptrace 权限:若报错无法劫持,请检查
/proc/sys/kernel/yama/ptrace_scope。若为 1,确保 Wrapper 是通过父进程拉起的;若为 2/3 且无sudo权限,此方案可能失效。
刚看到一个老哥在问 正好前两天也遇到了,就总结一下发出来吧,
== 但是现在有个问题,不连续对话后过一会再聊天还是不行,需要重启应用或者重连,排查了很久也没排查出来 ==
—【求助】代理环境下 Google Code Assist OAuth 认证失败 + Antigravity remote-ssh 配置
网友解答:--【壹】--:
你这个情况就是跟没连上是一样的,重点关注一下 [quote=“jasonli, post:1, topic:1689627”]
language_server_linux_x64
[/quote]
这个改没改,运行没有 排查一下吧
--【贰】--:
感谢,终于是用上了,学校服务器都是没sudo的,按这个教程一次成功
--【叁】--:
image1465×387 23.7 KB
佬,我按你的方式配置了以后还是存在问题,对话时一直在工作但不输出
image966×207 2.89 KB
--【肆】--:
nice! 按照大佬的方法跑通了!
--【伍】--:
mark一下,之前因为反重力的网络限制太恶心,一直都没使用
--【陆】--:
非常的有用,谢谢大佬分享
--【柒】--:
强呀,大佬!

