最近在远程服务器上使用VS Code进行开发时,遇到了一个颇为棘手的问题:Copilot插件中的Claude模型突然消失不见。更奇怪的是,当我不使用任何代理设置时,虽然VS Code Copilot中的Claude模型恢复了,但Openrouter的Claude连接却变得极不稳定,频繁断联。这种左右为难的情况严重影响了我的开发效率。
经过一番排查,我发现问题的根源在于网络代理配置的冲突。VS Code的远程开发环境和本地开发环境对代理的需求不同,而默认的代理设置无法同时满足两者的需求。具体表现为:
要解决这个复杂的问题,我们需要设计一个分层的代理方案:
这个方案的核心在于利用SSH的RemotedForward功能,创建一个从服务器回连到本地的代理隧道。这样既保证了VS Code远程扩展的正常工作,又维持了Openrouter的稳定连接。
首先,我们需要确保服务器上的环境是干净的:
bash复制# 清理bashrc中的代理设置
sed -i '/http_proxy/d' ~/.bashrc
sed -i '/https_proxy/d' ~/.bashrc
sed -i '/all_proxy/d' ~/.bashrc
# 清理zshrc中的代理设置
sed -i '/http_proxy/d' ~/.zshrc
sed -i '/https_proxy/d' ~/.zshrc
sed -i '/all_proxy/d' ~/.zshrc
注意:执行这些命令前,建议先备份你的配置文件。可以使用
cp ~/.bashrc ~/.bashrc.bak和cp ~/.zshrc ~/.zshrc.bak创建备份。
在本地机器的~/.ssh/config文件中添加以下配置:
code复制Host my-remote-server
HostName your.server.ip
User your_username
Port 22
IdentityFile ~/.ssh/id_rsa
RemoteForward 18999 127.0.0.1:1082
ServerAliveInterval 60
关键参数说明:
RemoteForward 18999 127.0.0.1:1082:将服务器上的18999端口转发到本地的1082端口ServerAliveInterval 60:保持连接活跃,防止超时断开bash复制export PROXY_PORT="18999"
proxy_on() {
export http_proxy="http://127.0.0.1:$PROXY_PORT"
export https_proxy="http://127.0.0.1:$PROXY_PORT"
export all_proxy="socks5://127.0.0.1:$PROXY_PORT"
export no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,*.local,*.lan,*.cn"
if [[ "$1" != "silent" ]]; then
echo "Terminal Proxy [ON]: Tunneling to Local 1082 via 18999"
fi
}
proxy_off() {
unset http_proxy https_proxy all_proxy
echo "Terminal Proxy [OFF]"
}
# 默认开启代理
proxy_on silent
bash复制export http_proxy="http://127.0.0.1:18999"
export https_proxy="http://127.0.0.1:18999"
export all_proxy="socks5://127.0.0.1:18999"
export no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
在VS Code的设置(JSON)中添加以下配置:
json复制{
"http.proxy": "http://127.0.0.1:18999",
"http.proxyStrictSSL": false,
"remote.extensionKind": {
"pub.name": ["ui"]
}
}
配置说明:
http.proxy:指定VS Code使用的代理地址http.proxyStrictSSL:禁用严格的SSL验证,解决某些证书问题remote.extensionKind:控制扩展在本地还是远程运行完成上述配置后,按照以下步骤验证是否生效:
env | grep -i proxy,确认代理变量已正确设置如果一切正常,你应该能看到:
如果遇到端口已被占用的错误,可以按以下步骤解决:
bash复制# 查看18999端口占用情况
sudo lsof -i :18999
# 如果端口被占用,可以修改配置使用其他端口
# 只需将18999替换为其他未被占用的端口号即可
如果代理设置没有生效,检查以下内容:
curl -v http://www.google.com,观察是否通过代理访问如果VS Code扩展仍然不正常:
连接稳定性:可以添加以下SSH配置提高连接稳定性:
code复制TCPKeepAlive yes
ServerAliveCountMax 3
ServerAliveInterval 15
代理性能:如果发现代理速度较慢,可以尝试:
选择性代理:通过精细配置no_proxy环境变量,让部分流量直连,提高效率。
这套方案在我多个开发环境中测试通过,有效解决了VS Code远程开发中Copilot和Openrouter的代理冲突问题。实际使用中,连接稳定性显著提高,开发体验流畅了许多。