在 Mac + 日本服务器:把开发环境留在远端 里,我把代码、依赖和开发服务留在服务器上,Mac 负责打开编辑器、连接终端和查看页面。接下来很自然的一步,就是把 Claude Code 也放到同一个项目目录里运行。

这样做的好处很具体:模型读到的是正在开发的那份代码,执行测试用的是服务器上的依赖,离开 Mac 后也能通过 tmux 找回原来的工作现场。但不少人真正关心的是另一个问题:在日本服务器使用 Claude Code,怎样才能不被封号?

没有一种服务器配置能保证账号永远不受限制。可以做到的是把运行位置、登录身份和请求路径弄清楚,减少混用凭证、误配网络和误判报错带来的问题。这篇按一次实际搭建应该经过的顺序,把这些环节串起来。

先确认:远端开发和账号资格是两件事

日本在 Anthropic 公布的支持地区列表中,但服务器的机房位置不能单独证明使用者或组织符合服务条件。需要核对所用产品、实际使用地区和账号所属组织的要求。官方支持地区

使用自己的账号登录远端的官方 Claude Code,也不等于把订阅转成第三方接口。官方说明允许用户用自己的订阅登录未经修改的 Claude Code,包括托管环境中的官方程序;同时限制第三方收集、代管 Claude.ai 凭证,以及代用户转售或中转订阅用量。认证与凭证使用规则

所以,本文采用的场景是:自己管理的开发服务器、官方 CLI、自己的合资格账号或组织授权身份。 如果是在给其他人做产品、统一代管登录或提供模型接口,应按产品场景选择 API 或受支持的云服务,不能直接套用个人远端开发的做法。

所谓“某家日本 VPS 永不封号”“换成住宅 IP 就安全”,我没有找到能支持这些保证的官方依据。选服务器时,延迟、可用性、系统维护和备份都能实际比较;“不封号”不能作为可以验收的机器配置。

从 Mac 到模型,中间有两条不同的连接

下面画的是在远端终端运行官方 CLI、通过 Mac 浏览器完成授权的常见情况。配置了组织网关或代理时,请求路径还需要按实际配置核对。

Mermaid
flowchart TD
  M["Mac:终端或 VS Code"] -->|SSH| S["日本服务器:项目目录"]
  S --> C["服务器上的 Claude Code"]
  C -->|模型请求| A["Anthropic 服务"]
  C -.->|显示授权网址| B["Mac 浏览器"]
  B -->|本人登录授权| L["官方登录页面"]
  L -.->|按提示完成验证| C
  S --> D["开发服务:127.0.0.1:5173"]
  M -->|指定端口转发| D

正在加载图表…

这里最容易混淆的是浏览器。CLI 在服务器运行,不会自动把 Mac 浏览器的所有访问也搬到服务器。 在 Mac 打开授权网址,浏览器仍然使用它自己的网络配置;后续 Claude Code 发起模型请求,则使用远端进程的网络配置。

页面预览也一样。转发服务器的 5173 端口,只是在 Mac 和那个开发服务之间建立通道,不会顺带接管 Claude 官网登录、其他网页或者本地运行的另一个 Claude Code。

这能解释一个常见现象:远端终端可以启动 Claude,Mac 上的登录页面却打不开。此时应分别检查浏览器的访问和远端请求,不要因为 SSH 已经连通,就断定两条路径都正常。

第一步:确认 Claude 真的装在服务器上

下面的 jp-dev 是 Mac 上已经配置好的 SSH 别名,~/projects/demo 是远端示例项目目录。连接方法可以先看前一篇,已有可用环境不需要重新配置。

在 Mac 的终端执行:

bash
ssh jp-dev

进入远端后执行:

bash
hostname
whoami
pwd
command -v claude

前三条用于确认机器、用户和当前目录。最后一条有输出,只能说明当前 shell 找到了 claude;没有输出则可能尚未安装,也可能安装目录没有进入 PATH。

如果使用 VS Code,应先通过 Remote - SSH 打开远端文件夹,再新建那个窗口里的终端。Remote - SSH 的终端会运行在远端主机,但 Mac 上另开的 Terminal 窗口仍然可能是本地 shell;用 hostname 核对,比凭窗口外观判断可靠。VS Code Remote - SSH 文档

对于尚未安装的 Linux 开发账号,可以使用官方推荐的原生安装方式。以下命令会下载并执行官方安装脚本,应在自己的普通开发用户下运行:

bash
curl -fsSL https://claude.ai/install.sh | bash

安装后按终端提示处理 PATH,重新打开远端 shell,再检查:

bash
claude --version
claude doctor

原生安装避免了为了 CLI 本身另行管理 Node.js 版本;项目需要的 Node.js、Bun 或其他运行时仍要单独准备。安装方式、系统要求和路径处理以 官方安装文档 为准。claude doctor 是终端中的安装与配置诊断,不代表模型请求已经成功。CLI 命令说明

第二步:先决定用哪一个身份和账单

远端环境经常用过不止一个 AI 工具。一个很隐蔽的问题是:你想用自己的 Claude 订阅,shell 里却还留着以前配置的 API key 或网关地址。

在登录前,先确定这台机器打算走哪条路径:

左右滑动查看完整表格

使用方式

准备什么

去哪里确认用量

Claude 订阅

具备 Claude Code 使用权限的本人账号

对应订阅或组织的用量页面

Anthropic API

有权限的 Console 身份或 API 凭证

Console 中对应组织、工作区的账单

组织提供的云平台或网关

管理员规定的身份和配置

对应云平台或组织的管理入口

订阅和 API 是不同的使用路径。不要看到登录成功就默认请求一定扣订阅额度;实际使用的身份还要结合客户端状态核对。

在远端的 Bash 或 Zsh 中运行下面这段独立 Bash 脚本;如果正在使用 Fish,先输入 bash 切换 shell。它只显示几项常见变量是否非空,不会打印 key、token 或代理密码:

bash
bash <<'SH'
for name in \
  ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN \
  CLAUDE_CODE_OAUTH_TOKEN ANTHROPIC_BASE_URL \
  CLAUDE_CODE_USE_BEDROCK CLAUDE_CODE_USE_VERTEX \
  CLAUDE_CODE_USE_FOUNDRY CLAUDE_CONFIG_DIR \
  HTTPS_PROXY HTTP_PROXY https_proxy http_proxy
do
  if [ -n "${!name}" ]; then
    printf '%s: 已设置非空值\n' "$name"
  else
    printf '%s: 未设置或为空\n' "$name"
  fi
done
SH

有输出“已设置”并不表示配置错误。这份清单只是帮助定位遗留设置:变量可能来自 shell 启动文件、容器、服务管理器或管理员配置。先查清来源和用途,再决定是否调整;不要把组织要求的配置一股脑删掉。

脚本也不是完整的配置审计。Claude 的设置文件、命名配置和组织策略仍可能影响认证。在 Claude Code 内查看 /status,结合 官方认证说明 确认实际采用的方式。截图求助前,应遮掉账号、组织标识和其他私人信息。

第三步:服务器没有浏览器,也能完成官方登录

先在远端检查现有状态:

bash
claude auth status --text

如果已经是预期的账号,继续使用即可。没有登录时,再执行:

bash
claude auth login

按 CLI 提示完成授权。SSH 环境不能自动打开浏览器时,把终端提供的官方授权网址在自己的 Mac 浏览器中打开。若登录页显示验证代码,就按终端的提示粘贴回去;官方文档明确提到,SSH 等环境可能无法完成本地回调,因此会使用这个步骤。远端登录流程

授权完成后,再运行一次 claude auth status --text。检查的是这台服务器、这个 Linux 用户的状态,不是 Mac 上另一个 CLI 的登录状态。

整个过程不需要把密码发给别人,也不需要把 Mac 的整个 Claude 配置目录复制上来。授权链接和验证码同样不要贴进公开评论、截图或代码仓库。

我也不建议为了省一次登录,把带有个人登录态的服务器镜像分发给别人。机器能开机和某个人有权使用里面的凭证,是两件事;换用户、换机器或重建环境时,重新明确身份更容易维护。

第四步:在真实项目里做一次小范围验证

登录状态正常之后,进入服务器上真正要开发的目录:

bash
cd ~/projects/demo
git status --short
claude

第一次先给一个范围小、结果容易核对的任务。例如:

代码
先只阅读项目,不修改文件、不安装依赖、不执行部署。
说明入口目录和测试命令各在哪里,并引用对应的文件路径。
如果需要执行命令,先说明目的;不要读取 .env、密钥和凭证文件。

这段提示用于表达任务范围,不能替代操作系统权限、Claude 的工具确认或项目隔离。涉及生产凭证的环境,仍应先控制实际访问权限。

看完回答,自己检查它提到的文件是否存在、测试命令是否确实写在项目配置里。然后再允许一个小改动,并用 Git diff 和相应测试验收。这一步能发现“连对了服务器,却进入了另一个同名目录”之类的问题。

能收到一次回答,只说明当次请求成功,不代表后续额度充足、所有模型可用,也不能据此预测账号永远不会受限。

如果任务需要在合上 Mac 后继续,先在远端 shell 建立或进入 tmux 会话,再启动 Claude:

bash
tmux new-session -A -s claude-demo

执行后先看当前界面。如果恢复的已经是 Claude,就直接检查任务状态;不要把 shell 命令粘贴成一条新提示。会话保留、断线后重连,以及服务器重启后的恢复差别,在 Claude Code 服务器使用指南:tmux 断线重连 中展开。

页面预览用端口转发,不用开放整个开发环境

假设项目的开发服务已经在服务器 127.0.0.1:5173 监听,可以在 Mac 的另一个终端执行:

bash
ssh -N -L 127.0.0.1:5173:127.0.0.1:5173 jp-dev

保持这个终端连接,再在 Mac 浏览器访问 http://127.0.0.1:5173。前一个 127.0.0.1:5173 是 Mac 的监听地址,后一个是从 SSH 服务器这一端访问的目标地址。这里假设开发服务直接运行在主机上;容器里的服务还需要有相应的主机端口映射。

本地端口被占用时,可以只把前面的端口改成 15173,浏览器也改访问 http://127.0.0.1:15173。项目的远端端口不必跟着改。

这条通道用于查看开发页面。它不会修改 Claude 的账号资格,也不会自动改变 Mac 浏览器访问其他网站的路径。需要预览一个页面时,没有必要顺手开放 SSH 之外的管理面板、终端服务或全部开发端口。Remote - SSH 的端口转发说明

请求失败时,先保留错误,再判断是不是账号问题

排查时先记下四件事:发生时间、claude --version 的输出、当时使用的认证方式,以及去掉敏感信息后的完整错误。如果响应带有 request ID,一并保存,比只留“连不上”三个字更便于定位。

下面的 HTTP 状态含义对应 Anthropic API。订阅客户端、第三方云平台和网关可能有自己的提示,最终应以实际错误正文及官方页面为准。API 错误与 request ID

左右滑动查看完整表格

现象

优先检查

下一步

SSH 超时或拒绝连接

服务器、密钥、防火墙和 SSH 路径

先恢复到开发机的连接

CLI 找不到命令或启动异常

安装位置、PATH、版本、配置

运行版本检查和 claude doctor

请求超时、TLS 或代理错误

远端进程的网络、证书和代理配置

对照网络文档定位,不反复换账号

API 401

凭证缺失、过期、撤销或使用了错误身份

核对认证来源,必要时重新认证

API 402

账单或付款信息

查看对应账单入口

API 403

资源权限、组织或工作区访问权限

阅读错误正文,核对被拒绝的资源

API 429

速率、用量层级或相关支出上限

按错误类型检查限额和恢复条件

API 529

服务暂时过载

查看服务状态,稍后重试

官方页面明确显示账号停用

账号通知与适用规则

通过官方入口申请核查

特别是 403 和 429,不能只凭数字就下“封号”的结论。429 也不全是等几秒重试就能恢复,有些涉及用量或支出上限。先确认是哪一种,才知道应该等待、降低请求频率,还是处理账单和权限。

远端若配置了代理,还要注意 HTTPS_PROXY、HTTP_PROXY 及其小写形式;Claude Code 的代理配置应遵循官方支持范围,不能把任意代理地址直接套进去。修改启动环境后,需要重新启动相应 CLI 进程才能读取新值。网络配置文档

同时可以查看 Anthropic 服务状态。状态页正常不能排除个人账号问题,但当官方确认故障时,继续重装客户端通常解决不了服务端故障。

真正能长期坚持的账号使用习惯

这套环境里,我更关心几件可以解释清楚的事:谁在使用账号,程序是否来自官方,请求走哪条路径,费用记在哪个组织,以及凭证留在哪台机器上。

日常维护时,用自己的身份或组织授权身份;让不同使用者有各自的开发账号;不把个人订阅登录态当作多人共享接口;更新客户端前保留可回退的项目状态;任务量增加时先检查实际限额。远端机器长期在线,也应持续维护系统、SSH 权限和备份,而不是装好 CLI 就放任不管。

如果确实出现账号停用,官方列出的可能原因包括使用政策、服务条款和不受支持地区注册等。按 账号限制与申诉说明,使用受限账号登录后进入申诉入口,提交脱敏的错误信息和必要背景。换一台服务器不能替代对账号本身的核查。

Mac + 日本服务器给我带来的价值,是让开发现场集中在一个持续在线、自己能够维护的环境里。把 Claude Code 放进去以后,代码、测试、终端和页面预览可以围绕同一个项目协作。先把这些关系搭清楚,遇到问题时就知道该检查哪一层,也不需要把每次登录失败都猜成封号。