
1. 为什么本地 VSCode 连服务器后AI Key 反而更乱了先说清楚这篇要解决的是什么问题。VSCode 通过 Remote SSH 连上云服务器之后你的代码、终端、Python 环境全都跑在远端但 AI 编程工具Cline、Continue、Codex CLI、Claude Code 这类的配置文件却散落在两个地方一部分在本地 Windows/Mac 的~/.ssh/config和 VSCode 的settings.json另一部分在服务器的~/.bashrc、~/.config目录里。结果就是每换一台机器、每加一个工具就要重新填一遍 API Key、Base URL、Model ID填错一个字符就报 401排查半天发现是复制时多了个空格。Remote SSH 本身是 VSCode 官方插件作用是把本地编辑器的界面和远端服务器的文件系统、终端打通。你在本地敲代码实际执行在服务器上。ssh-keygen 是 OpenSSH 自带的密钥生成工具用来做免密登录省掉每次输密码的麻烦。这两个东西组合起来能让你像操作本地文件夹一样操作服务器。但真正让人头疼的不是连接本身而是连上之后 AI 工具的 endpoint 配置。我试过在三个工具里分别维护三套 Key某次服务器重装系统配置文件全丢只能一个个重新填。后来把 endpoint 统一改到 TaoToken 的 API 地址本地和远端共用同一个 Key才算把这件事理顺。这篇就按「生成密钥 → 配置免密 → Remote SSH 连上 → 改 AI 工具 endpoint → 验证请求」的顺序把整条链路走一遍每一步都给可复制的命令和配置。适合谁看手上有云服务器、想用 VSCode 远程开发、同时又在用 AI 编程工具的人。不需要你懂 SSH 底层原理照着敲命令就行。下面从 ssh-keygen 开始。2. ssh-keygen 生成密钥与 Remote SSH 免密配置踩坑记录2.1 ssh-keygen 生成密钥对打开本地终端Windows 用 PowerShell 或 CMDMac/Linux 用 Terminal执行ssh-keygen -t rsa -b 4096 -C your_emailexample.com-t rsa指定密钥类型-b 4096指定长度-C后面是注释随便写个能标识这台机器的字符串。执行后会提示Enter file in which to save the key (/home/you/.ssh/id_rsa):直接回车用默认路径。接着提示输入 passphrase做免密登录的话直接回车两次留空。生成完成后~/.ssh/目录下会有两个文件id_rsa是私钥绝对不能外传id_rsa.pub是公钥要放到服务器上。这里有个我踩过的坑Windows 用户名是中文时ssh-keygen 会报Could not create directory ... Invalid argument因为默认路径里带了中文。解决办法是在提示Enter file in which to save the key时手动输入一个纯英文路径比如C:\Users\Andrea\.ssh\id_rsa。如果连这个路径都建不了最彻底的办法是新建一个英文名的 Windows 用户账号用那个账号操作。中文用户名引发的路径问题不止影响 ssh-keygen很多命令行工具都会中招。2.2 把公钥上传到服务器生成好公钥后需要把它追加到服务器的~/.ssh/authorized_keys里。最直接的方式是用 scp 上传但更推荐用ssh-copy-idMac/Linux 自带Windows 的 Git Bash 也有ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 useryour_server_ip-p后面是 SSH 端口默认 22 的话可以省略。执行后会让你输一次服务器密码输完公钥就自动追加进去了。如果服务器没装 ssh-copy-id就手动来cat ~/.ssh/id_rsa.pub | ssh -p 2222 useryour_server_ip mkdir -p ~/.ssh chmod 700 ~/.ssh cat ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys权限这一步别省。~/.ssh必须是 700authorized_keys必须是 600权限不对 SSH 会直接拒绝免密登录而且报错信息很含糊容易误以为是密钥问题。2.3 配置本地 SSH config在本地~/.ssh/configWindows 是C:\Users\你的用户名\.ssh\config里加一段Host taotoken-server HostName 123.45.67.89 Port 2222 User ubuntu IdentityFile ~/.ssh/id_rsa ServerAliveInterval 60 ServerAliveCountMax 3Host后面是你在 VSCode 里看到的连接名随便起HostName是服务器真实 IPPort是 SSH 端口不是 22 就必须写User是登录账号写错连不上IdentityFile指向私钥。ServerAliveInterval是保活防止长时间不操作被断开。配好后先在终端验证ssh taotoken-server能直接进去不输密码说明免密通了。进不去就加-v看详细日志ssh -v taotoken-server日志里会显示用了哪个密钥、卡在哪一步。常见的是Permission denied (publickey)八成是公钥没传对或者权限不对。2.4 VSCode 装 Remote SSH 插件并连接在 VSCode 扩展市场搜Remote - SSH安装微软官方那个。装好后按F1输入Remote-SSH: Connect to Host选你 config 里配的taotoken-server。第一次连会问服务器系统类型选 Linux。连上后左下角会显示SSH: taotoken-server说明你已经在远端环境里了。这时候打开终端pwd看到的是服务器路径whoami是服务器用户名确认没连错机器。接下来所有 AI 工具的配置都要在这个远端终端里做而不是本地。3. 在远程环境把 AI 工具 endpoint 统一到 TaoToken3.1 先拿统一 Key打开 TaoToken 的 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite登录后创建一个 Key复制出来。这个 Key 就是后面所有工具共用的凭证。注意别把它提交到 Git建议放在环境变量里。在远端服务器的~/.bashrc末尾加export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api然后source ~/.bashrc生效。这样每个新开的终端都能读到不用每次手动 export。3.2 配置 ClineVSCode 插件Cline 是跑在 VSCode 里的 AI 编程插件Remote SSH 连上后它默认在远端运行。打开 Cline 设置API Provider 选OpenAI Compatible然后填{ apiProvider: openai, openAiBaseUrl: https://taotoken.net/api, openAiApiKey: sk-你的key, openAiModelId: claude-sonnet-4-20250514 }Base URL 一定要带/apiModel ID 按你实际要用的模型填。填完点保存Cline 会发一个测试请求通了就能用。3.3 配置 Codex CLI 的 auth.json如果你在服务器上用 Codex CLI它的凭证在~/.codex/auth.json。改成{ OPENAI_API_KEY: sk-你的key, OPENAI_BASE_URL: https://taotoken.net/api }三件套齐了Base URL 是https://taotoken.net/apiKey 是刚才那个Model ID 在调用时用-m指定。改完跑一次codex print hello验证。3.4 配置 Claude Code 的 settingsClaude Code 读的是环境变量或~/.claude/settings.json。用 settings 文件的方式{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key } }保存后重启 Claude Code。这样本地和远端用的是同一个 endpoint换机器只要把 Key 同步过去就行不用每个工具单独配。4. 验证统一通道是否生效配置改完必须验证不然等到写代码时才发现连不上排查成本更高。最直接的方式是用 curl 打一次请求curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: reply with ok}], max_tokens: 10 }返回里如果有choices字段和内容说明通道通了。如果返回 401是 Key 不对返回 404多半是 Base URL 少了/v1或多了斜杠返回local proxy failed是本地网络层的问题检查有没有多余的代理环境变量。再验证一下工具层。在远端终端跑echo $TAOTOKEN_BASE_URL echo $TAOTOKEN_API_KEY | head -c 8确认环境变量读到了。然后在 Cline 里发一句「列出当前目录文件」能正常返回就说明插件也走通了。Claude Code 的话直接claude say hi看它有没有正常回复。我实测下来最容易出问题的是 Base URL 的写法。有人填https://taotoken.net少了/api有人填https://taotoken.net/api/多了尾斜杠都会导致 404。统一写成https://taotoken.net/api最稳。5. 常见报错排查401、local proxy failed、reading choices5.1 401 Unauthorized报错长这样{error:{message:Invalid API key,type:invalid_request_error}}原因就三类Key 复制时带了空格或换行、Key 已过期或被删、环境变量没生效。排查顺序先echo $TAOTOKEN_API_KEY看值对不对注意有没有隐藏字符再去 TaoToken 控制台确认 Key 状态最后检查是不是在错误的 shell 里 export 了比如在本地 export 却想在远端用。5.2 local proxy failed这个报错通常出现在工具内部意思是它尝试走本地代理但失败了。检查环境变量里有没有HTTP_PROXY、HTTPS_PROXY、ALL_PROXYenv | grep -i proxy有的话先unset掉再试。另外确认 Base URL 是https开头有些工具对 http 会走不同逻辑。5.3 reading choices 相关报错类似cannot read property choices of undefined说明返回体里没有choices字段通常是请求根本没成功但工具没处理好错误响应。先用第 4 节的 curl 命令单独测一次确认 API 层是通的。如果 curl 通、工具不通就是工具的配置问题重点看 Model ID 是否写错、Base URL 是否完整。5.4 OAuth 相关报错有些工具默认走 OAuth 登录流程报OAuth token expired或failed to refresh token。这类工具要显式切到 API Key 模式在配置里把认证方式改成api_key填上 TaoToken 的 Key 和 Base URL。别让它走默认的 OAuth那条路和统一 Key 通道是两套逻辑。5.5 SSH 连不上但密钥没问题回到 Remote SSH 本身。如果ssh taotoken-server能通但 VSCode 连不上检查 VSCode 的settings.json里有没有覆盖remote.SSH.configFile指向了错误的 config 路径。另外 Windows 上 VSCode 用的 SSH 可能是系统自带的 OpenSSH和你终端里用的 Git Bash SSH 不是同一个密钥路径可能对不上。在 VSCode 设置里搜remote.SSH.path显式指定你验证过的那个 ssh 可执行文件路径。6. 把统一通道固化下来走到这一步本地 VSCode 通过 Remote SSH 连上了服务器ssh-keygen 生成的密钥做了免密AI 工具的 endpoint 和 Base URL 都指向了 TaoToken 的https://taotoken.net/api一个 Key 管所有工具。剩下要做的就是把这套配置固化避免下次重装或换机器时重来。我的做法是把 SSH config、~/.bashrc里的环境变量、各工具的 settings 文件都放进一个私有 Git 仓库新机器上 clone 下来改一下服务器 IP 和 Key 就能用。Key 本身不提交用.env.example占位实际值手动填。这样换机器的时间从半天缩短到十分钟。另外提醒一句~/.ssh和~/.codex、~/.claude这些目录的权限要盯紧别设成 777SSH 和部分工具会拒绝加载权限过松的配置。定期ls -la看一眼发现不对就chmod 700修回来。如果后面要接更多工具思路是一样的找它的 Base URL 配置项填https://taotoken.net/apiKey 填同一个Model ID 按需选。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 有各工具的详细字段说明遇到不确定的字段名去那里对一下。长期在服务器上跑 Agent 类任务的话Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite的额度模型更适合持续调用不用每次担心按量计费的波动。