☰
2026年SSH远程开发实战:把Claude Code的settings改到TaoToken直写服务器代码
2026/10/17 10:12:51 网站建设 项目流程

1. SSH 远程开发为什么值得折腾:Claude Code 直连服务器写代码的真实场景

SSH 远程开发这件事,说白了就是把你的编辑器、终端、AI 助手全部搬到服务器那一侧去跑,本地只留一个显示和输入的窗口。Claude Code 这类命令行 AI 编程工具天生就是为终端环境设计的,它读写文件、执行命令、查看日志都发生在当前工作目录所在的机器上。所以当你通过 SSH 连到服务器再启动 Claude Code,它看到的 nginx 配置、docker-compose.yml、systemd 服务文件、应用日志,全都是真实运行环境里的那一份,而不是你本地同步过来的副本。

这个差别在排查线上问题时特别明显。本地开发时你改完代码要 push、要部署、要等 CI,中间隔了好几层;而在服务器上直接让 Claude Code 读错误日志、定位崩溃进程、改配置文件、重启服务,整个链路是闭合的。我试过用这种方式处理一次 502 报错,从看日志到改完 docker-compose 的内存限制再重启,前后不到十分钟,换成以前本地改完再部署的流程,光等构建就得半小时。

适合谁用这套方案?第一类是独立开发者和中小团队,服务器就一两台,没有复杂的 K8s 编排,直接 SSH 上去改最直接;第二类是运维和全栈,需要经常登服务器看状态、调参数;第三类是本地机器性能一般,想把编译、跑测试这些重活丢给服务器的开发者。反过来说,如果你的项目有严格的发布流程、所有变更必须走 PR 和 CI,那直接在服务器上改代码就不合适,这时候 SSH 远程开发更适合用来做排查和临时修复,而不是日常开发。

环境准备上,服务器端需要 Node.js 18 以上(Claude Code CLI 的运行依赖),一个可用的 SSH 账号,以及能访问外网的能力。客户端这边,VS Code 装好 Remote - SSH 插件就够了,或者你直接用系统终端 ssh 进去也行。下面这张表是我实测下来两种连接方式的取舍:

方式优点适合场景
VS Code Remote SSH图形化编辑、文件树、集成终端日常写代码、多文件改动
纯终端 ssh轻量、启动快、资源占用低快速排查、临时改配置

不管你选哪种,核心都是先在服务器上把 Claude Code 跑起来,再让它指向一个稳定的模型通道。这一步的鉴权和端点配置,就是后面几节要讲的重点。

2. TaoToken 前置准备:统一 Key 与 API 通道在 Claude Code 里的定位

Claude Code 默认会去连 Anthropic 官方的接口,但在国内服务器环境下,直连经常不稳定,而且计费和额度管理也比较分散。TaoToken 在这里扮演的角色是一个统一的模型接入通道:你用同一个 Key,就能调用包括 Claude 系列在内的多种模型,端点也统一成一个地址,配置起来只需要改几个字段。

先把几个关键地址记清楚,后面配置里会反复用到:

  • 官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • API 基础地址:https://taotoken.net/api
  • 模型对话体验页:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • Coding Plan 订阅页:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • 控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=

你需要提前拿到两样东西:一个是 API Key,在 API Keys 页面创建,格式通常是一串以特定前缀开头的长字符串;另一个是你要用的模型 ID,比如 Claude 系列的具体型号名,这个在模型列表或接入文档里能查到。Key 只在创建时完整显示一次,记得当场复制保存,后面配置里要用。

这里要强调一个概念:Claude Code 的配置分两层。一层是环境变量,比如ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN,它们决定请求发往哪里、用什么身份;另一层是settings.json,用来固化模型选择、权限策略、工具开关这些行为。很多人只改了环境变量就以为完事了,结果模型还是默认的那个,或者权限弹窗一直拦着,就是因为 settings.json 没同步。

注意:Key 属于敏感凭证,不要写进会提交到 Git 的文件里。服务器上的配置建议放在用户主目录下的隐藏目录,并确认该目录不在任何仓库的追踪范围内。

如果你打算长期在服务器上跑编码任务,Coding Plan 会比按量计费更划算,额度覆盖日常的代码生成和排查足够用。短期试用的话,先用按量 Key 跑通流程,确认稳定了再决定要不要订阅。

3. 可复制配置:settings.json 与 SSH 环境变量完整片段

这一节是整篇的核心,所有片段都可以直接复制,只需要把 Key 和模型 ID 换成你自己的。Claude Code 在 Linux 服务器上的配置目录是~/.claude/,主配置文件是~/.claude/settings.json。如果这个目录不存在,先手动创建:

mkdir -p ~/.claude

然后是 settings.json 的完整内容。这个片段里我把模型、端点相关的环境变量、权限模式都放进去了,路径和字段名与 Claude Code 实际读取的一致:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "ANTHROPIC_SMALL_FAST_MODEL": "claude-3-5-haiku-20241022" }, "permissions": { "allow": [ "Read", "Edit", "Bash(git status)", "Bash(git diff)", "Bash(docker ps)", "Bash(docker logs:*)" ], "deny": [ "Bash(rm -rf:*)", "Bash(shutdown:*)" ] }, "model": "claude-sonnet-4-20250514" }

几个字段解释一下。ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址,注意结尾不要多加斜杠,Claude Code 会自己拼接路径。ANTHROPIC_AUTH_TOKEN填你创建的 Key。ANTHROPIC_MODEL是主模型,负责主要的代码生成和推理;ANTHROPIC_SMALL_FAST_MODEL是轻量模型,用于一些快速判断和补全,填一个便宜快速的型号能省额度。permissions.allow里我放了一些只读和查看类命令,这样 Claude Code 执行这些命令时不会每次都弹确认;deny里挡掉了危险操作,避免误删。

如果你不想把 Key 写进 settings.json,也可以用环境变量的方式,在~/.bashrc或~/.zshrc里追加:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的TaoToken密钥" export ANTHROPIC_MODEL="claude-sonnet-4-20250514"

改完执行source ~/.bashrc让它生效。环境变量的优先级高于 settings.json 里的 env 段,两种方式选一种就行,别同时配导致自己搞混。

SSH 这边,客户端~/.ssh/config建议加上保活参数,否则长时间不操作连接会断,Claude Code 跑到一半掉线很烦:

Host myserver HostName 你的服务器IP User deploy IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60 ServerAliveCountMax 3 ForwardAgent yes

ServerAliveInterval 60表示每 60 秒发一次保活包,ServerAliveCountMax 3表示连续 3 次没响应才断开。ForwardAgent yes让你在服务器上能用本地的 SSH 密钥去拉 Git 仓库,省得在服务器上再配一套密钥。

服务器端的 SSH 安全配置,编辑/etc/ssh/sshd_config:

PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 60 ClientAliveCountMax 3

改完sudo systemctl restart sshd重启服务。注意改之前确认你的公钥已经加到~/.ssh/authorized_keys,否则重启后自己都登不上去。

4. 验证请求:ssh 连接后运行 claude 的命令与预期输出

配置写完,接下来就是验证。整个过程分三步:连上服务器、确认环境变量生效、启动 Claude Code 发一个真实请求。

第一步,从本地连服务器:

ssh myserver

连上后先确认 Node 和 Claude Code 都在:

node -v claude --version

node -v应该输出 v18 以上的版本号,claude --version输出 CLI 的版本。如果提示 command not found,说明 Claude Code 没装或者不在 PATH 里,用npm install -g @anthropic-ai/claude-code装一下。

第二步,确认环境变量读到了:

echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_AUTH_TOKEN | head -c 8

第一行应该输出https://taotoken.net/api,第二行输出你 Key 的前 8 位(只显示前几位是为了避免完整 Key 出现在终端历史里)。如果第一行是空的,说明环境变量没生效,检查是不是忘了 source,或者 settings.json 的路径不对。

第三步,启动 Claude Code 并发一个请求。进入你的项目目录,然后:

cd /var/www/myapp claude

进入交互界面后,输入一句简单的测试:

帮我看看当前目录下有哪些文件,并说明这个项目的技术栈

预期输出是 Claude Code 会调用 Read 和 Bash 工具列出目录内容,然后根据 package.json 或 requirements.txt 判断技术栈,给出结构化的回答。如果配置正确,你会看到它正常读取文件、正常返回结果,没有任何鉴权报错。

想更直接地验证端点通不通,可以用一条非交互命令:

claude -p "用一句话说明当前目录是什么项目"

-p是 print 模式,执行完直接输出结果就退出,适合脚本化验证。正常的话几秒内返回一句话描述。如果卡住不动或者报错,就进入下一节的排查流程。

实测下来,从 ssh 登录到看到 Claude Code 正常返回,整个流程熟练后两分钟内能搞定。第一次配可能会在环境变量和权限上卡一会儿,把报错对照下一节基本都能解决。

5. 常见报错排查:401、local proxy failed、reading choices 与 OAuth 问题

配置过程中最容易撞上的就是这几类报错,我按实际遇到的频率排一下,每条给出原因和解决办法。

401 Unauthorized / authentication_error

这是最常见的,意思是 Key 没被识别。可能原因有三个:Key 复制时带了空格或换行、Key 已经失效或被删除、ANTHROPIC_AUTH_TOKEN这个变量名写错了(有人写成ANTHROPIC_API_KEY,Claude Code 读的是前者)。排查方法:

echo $ANTHROPIC_AUTH_TOKEN | wc -c

正常长度应该是 Key 字符数加 1(换行符)。如果明显偏短或偏长,就是复制出了问题。重新去 API Keys 页面复制一次,注意别选中前后的空白。如果变量名写错,改成ANTHROPIC_AUTH_TOKEN再 source 一次。

local proxy failed / connection refused

这个报错说明请求根本没发出去,卡在本地网络层。常见于服务器上配了 HTTP 代理但代理没起来,或者ANTHROPIC_BASE_URL写成了一个本地地址。检查:

echo $ANTHROPIC_BASE_URL curl -I https://taotoken.net/api

第一行确认是https://taotoken.net/api,第二行确认服务器能正常访问这个域名。如果 curl 也失败,说明是服务器出网的问题,检查安全组和 DNS 解析。如果 curl 通但 Claude Code 报 local proxy failed,检查有没有HTTP_PROXY/HTTPS_PROXY这类环境变量指向了一个不存在的本地端口,有的话 unset 掉。

reading choices / unexpected response format

这个报错通常出现在端点地址不对的时候。比如ANTHROPIC_BASE_URL填成了https://taotoken.net(少了/api),或者结尾多加了斜杠变成https://taotoken.net/api/,导致请求路径拼接错误,返回的内容不是预期的 JSON 结构,Claude Code 解析时就报 reading choices 失败。解决办法就是把地址严格写成https://taotoken.net/api,不多不少。

OAuth / login required

Claude Code 有时会提示需要登录或走 OAuth 流程,这是因为它在没有检测到有效鉴权信息时会回退到官方登录。出现这个说明你的ANTHROPIC_AUTH_TOKEN没被读到。确认 settings.json 的 env 段和环境变量至少有一个生效,并且变量名正确。如果两个都配了但还报 OAuth,检查 settings.json 的 JSON 格式有没有语法错误,用python -m json.tool ~/.claude/settings.json验证一下。

模型不存在 / model not found

Key 和端点都对,但模型 ID 填错了。去接入文档或模型列表里核对准确的模型 ID,注意大小写和日期后缀。ANTHROPIC_MODEL和ANTHROPIC_SMALL_FAST_MODEL两个都要填有效值,任何一个无效都可能导致请求失败。

把这几类报错对照一遍,基本能覆盖 90% 的配置问题。排查时养成先看环境变量、再看端点、最后看模型 ID 的顺序,比盲目改配置高效得多。

6. 长期编码与 Agent 场景:把 SSH 远程开发固化成日常流程

跑通验证之后,接下来要考虑的是怎么把这套流程变成日常习惯,而不是每次都要重新配一遍。我的做法是把配置固化下来,让新开的 SSH 会话自动带上正确的环境。

在服务器上,把环境变量写进~/.bashrc之后,每次登录自动生效。如果你用 VS Code Remote SSH,它打开的集成终端也会读取这个文件,所以图形化编辑和命令行是共享同一套配置的。项目级别的差异,比如不同项目要用不同模型,可以放在项目根目录的.claude/settings.json里,Claude Code 会优先读项目级的配置,这样切项目时模型和权限策略自动跟着变。

对于需要长时间跑的编码任务,比如让 Claude Code 批量重构一个模块、生成测试用例、或者做代码审查,建议配合 tmux 使用。SSH 连接断了任务也不会中断:

tmux new -s coding claude

在 tmux 会话里跑 Claude Code,即使本地网络波动掉线,重新 ssh 上来tmux attach -t coding就能接回原来的会话,任务继续跑。这个习惯在跑大任务时特别有用,我踩过的坑就是没开 tmux,跑到一半断线,前面的上下文全丢了。

权限策略上,日常开发可以把常用的只读命令和安全的写操作加进permissions.allow,减少确认弹窗的打断。但危险命令一定要留在deny里,尤其是rm -rf、shutdown、reboot这类。服务器上误操作的代价比本地大得多,宁可多弹几次确认。

如果你经常需要在多个服务器之间切换,可以给每台机器配一个 SSH Host 别名,然后在各自的~/.claude/settings.json里放不同的模型配置。比如测试服务器用便宜快速的模型,生产排查用能力更强的模型,切换时只需要ssh test或ssh prod,配置自动跟着走。

长期用下来,Coding Plan 的额度模式比按量计费更省心,不用担心某个月任务多就超支。日常的代码生成、日志分析、配置修改这些高频操作,额度覆盖得比较充分。需要临时用更强的模型处理复杂问题时,再单独走按量通道,两种模式可以并存。

最后留一个实用技巧:把常用的排查命令组合写成 Claude Code 的自定义指令,放在~/.claude/commands/目录下,之后用斜杠命令直接调用。比如一个check-service.md里写好检查容器状态、看最近日志、确认端口监听的步骤,排查时一句/check-service就能让 Claude Code 按固定流程走一遍,比每次重新描述需求快很多。这套流程固化下来之后,SSH 远程开发加 Claude Code 就真正变成了日常生产力,而不是偶尔用一次的玩具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询