SSH経由でリモートサーバーのClaude Codeにログインする方法
ブラウザのないサーバーで、コード貼り付けログイン、1年有効のsetup-token、またはAPIキーを使ってSSH越しにClaude Codeにログインし、スマートフォンから始めたセッションでもログインを保つ方法。
- CLI
- 0.2.17
- プレビュー ref
- a2c45c8
要点
SSHで接続するサーバーでは、Claude Codeはブラウザを開けず、ノートPCのブラウザからはサーバーのローカルのコールバックに届きません。方法は3つあります。
- コード貼り付けログイン。
claudeを実行し、ログインURLをノートPCかスマートフォンで開いてサインインし、ブラウザに表示されたコードをターミナルに貼り付けます。ときどき使うマシン向けです。 - 長期間有効なトークン。 ブラウザのあるコンピューターで
claude setup-tokenを実行し、サーバーでCLAUDE_CODE_OAUTH_TOKENを設定します。誰も前に座らないマシン向けです。 - APIキー。
ANTHROPIC_API_KEYを設定します。Claude Console経由でトークン単位の課金になり、スクリプトやCIに向いています。
ログイン画面のURLをSSH越しにコピーできない場合は、すぐに方法2に進んでください。
問題
よくある構成として、Claude Codeのセッションを別の部屋にあるLinuxマシンで動かすことがあります。リポジトリがそこにあり、スリープもしません。そこで初めてSSH越しに claude を実行すると、ログイン画面がブラウザを開くよう求めますが、そのマシンにはブラウザがありません。
ノートPCのブラウザでリンクは開けますが、サインイン後にノートPCの localhost に戻そうとし、そこでは何も待ち受けていません。しかも数週間後に認証情報が期限切れになり、もう一度同じことをする羽目になります。電車の中でスマートフォンから、ということもあるでしょう。
つまり本当の問題は、どうやって一度サインインするか、どうやってその状態を保つか、キーボードの前にいないときにどうするか、です。
方法1:コード貼り付けの流れでSSH越しにClaude Codeにログインする
これが通常の手順で、Anthropicの認証のドキュメントでもSSHやヘッドレスのホスト向けに説明されています。
ssh you@server
claudeログイン画面で:
cを押してログインURLをコピーするか、URLを選択します。- ノートPCかスマートフォンのブラウザで開いてサインインします。
- ブラウザはサーバーのコールバックに届かないので、リダイレクトする代わりにコードを表示します。
- そのコードを
Paste code here if promptedのプロンプトに貼り付けます。
つまずきやすい点:
- コピーのショートカットはサーバーのクリップボードにコピーします。 SSH越しにはそこに届きません。Claude CodeリポジトリのGitHub issueでは、全画面のログインUIの中でURLが折り返されて選択もできないという報告があります。そうなったら方法2を使ってください。
- tmuxや幅の狭いターミナルではURLが複数行に折り返されることがあります。コピーする前にウィンドウを広げるか、ペインをズームしてください。
- 認証情報は期限切れになります。 そうなると、そのマシンの次のセッションはまたログイン画面で止まり、SSH越しに同じことをやり直すことになります。
方法2:長期間有効な claude setup-token でClaude Codeにサインインする
誰も前に座らないマシン向けに、Anthropicは1年有効なOAuthトークンを案内しています。ブラウザのあるコンピューターで一度だけ作成します。
# on your laptop
claude setup-token/login と同じブラウザのサインインが開き、トークンが表示されますが、どこにも保存されません。コピーして、サーバーで:
# on the server, in the environment the agent runs in
export CLAUDE_CODE_OAUTH_TOKEN=your-token
claudeこのトークンについてAnthropicのドキュメントに書かれていること:
- Pro、Max、Team、Enterpriseのいずれかのサブスクリプションが必要です。
- モデルへのリクエストしかできないため、Claude Code Remote Controlのセッションを開始したり、claude.aiのコネクタを取得したりはできません。ローカルで設定したMCPサーバーは引き続き使えます。
--bareモードはこれを読みません。スクリプトが--bareを渡すなら、代わりにAPIキーを使ってください。
実用上の注意を2つ:
- トークンは自分のユーザーだけが読める場所に置きます。 共有マシンのシェルプロファイルではなく、読み込み用の
0600のファイルなどです。読める者は誰でもあなたのサブスクリプションを使えます。 - エージェントが実際に起動する場所で設定します。 Claude Codeがバックグラウンドサービスから起動されるなら、対話シェルでexportした変数はそこにはありません。トークンが「SSHでは動くのにサービスからは動かない」よくある理由がこれです。
方法3:サーバーでAnthropicのAPIキーを使う
export ANTHROPIC_API_KEY=sk-ant-...
claudeClaude Codeは一度だけキーの承認を求め、その後はブラウザを使いません。課金はClaude Console経由のトークン単位で、ProやMaxのサブスクリプションとは別です。スクリプトや定期ジョブに向いています。
スマートフォンから始めたセッションでもClaude Codeのログインを保つ
方法1〜3で最初のログインは解決します。難しいのは2回目です。1か月後にスマートフォンから始めたセッションが、SSHでつないでいないマシンで期限切れのログインのまま止まっている、という状況です。
サーバー上のClaude Codeセッションをスマートフォンから開始・操作し、SSHアプリを開かずにログインで止まっているセッションを把握したいなら、HappierはClaude Code、Codexなどのエージェントをスマートフォン、デスクトップ、Webからクロスデバイスで実行・オーケストレーションできるオープンソースアプリです。
エージェントはあなた自身のコンピューターやサーバーで動き、スマートフォン、デスクトップ、Webのアプリがそこに接続します。セットアップはスマートフォンからHappierを使う方法にあります。GitHubで公開されており、こちらからダウンロードでき、Discordもあります。
ログインまわりの動きは次のとおりです。
1) QRコードを読み取ってサーバーをHappierとペアリングする
サーバーで:
curl -fsSL https://happier.dev/install | bash
happier auth login --method mobileターミナルにQRコードが表示されます。スマートフォンのHappierアプリで読み取り、承認します。すでにHappier CLIが入っているノートPCからなら、happier auth pair-remote --ssh you@server でSSH越しにペアリングできます。
2) HappierアプリからサーバーのClaude Codeにログインする
アプリで 設定(Settings)→ AI とエージェント(AI & Agents)→ AIプロバイダー設定(AI backends)→ Claude を開き、コンテキストバーでサーバー(Happierでいうマシン)を選んで、認証(Authentication)セクションを見ます。そのコンピューターでClaude Codeがログイン済みかどうかと、その方法が表示されます。
ログイン(Log in)または 再認証(Reauthenticate)を押すと プロバイダー ログイン端末(Provider login terminal)が開き、サーバーでClaude Codeを起動して /login を送ってくれます。スマートフォンでURLを開いてサインインし、コードをその端末に貼り付けます。SSHアプリを使わない方法1です。別の方法でログインした後は、今すぐ確認(Check now)で状態を更新します。
3) ClaudeのsetupトークンをHappierに一度保存する
setup-tokenを使いたいなら、Happierが接続済みサービスとして保持できます。
claude setup-token # on a computer with a browser
happier connect claude # paste the token when askedhappier connect claude はデフォルトでsetup-tokenを求めます。トークンはHappierアカウントに暗号化して保存され、あなた自身のデバイスでのみ復号されます。設定(Settings)→ 接続済みサービス(Connected services)に表示され、どのコンピューターでClaudeのセッションを始めるときにも選べます。AnthropicのAPIキーも happier connect claude --api-key で同じように扱えます。
正直な制約:サーバーの電源が入っていて、到達できる必要はあります。Happierは電源の切れたマシンをログイン状態に保つことはできず、トークンに関するプロバイダー自身のルールも引き続き適用されます。
トラブルシューティング
Claude Codeのログインで c を押しても貼り付けられるものがコピーされない
コピー先はノートPCではなくサーバーです。ターミナル自体の選択機能でURLを選ぶか、折り返さないようウィンドウを広げるか、別のコンピューターで claude setup-token を使ってください。
Claudeのログイン後、ブラウザが localhost に届かない
コールバックがノートPCに届こうとしているだけです。コードが表示されているブラウザのタブに戻るか、ログインをやり直してコードの手順を探してください。SSH越しでは、コードを使うのが想定された手順です。
SSHではClaude Codeが動くのに、サービスが始めたセッションはログインを求める
サービスは対話シェルの環境を見ていません。サービスの環境に CLAUDE_CODE_OAUTH_TOKEN を設定するか、トークンを接続済みサービスとして保存して、開始時にセッションが受け取れるようにします。
setup-tokenではClaude Code Remote Controlが起動しない
Anthropicのドキュメントによると、setup-tokenはモデルへのリクエストしかできないため、Remote Controlには方法1の通常のclaude.aiログインが必要です。
よくある質問
ブラウザをまったく使わずにClaude Codeにログインできる?
どこかで一度、ブラウザが必要です。ノートPCでもスマートフォンでも構いません。claude setup-token もコード貼り付けログインも、別のデバイスのブラウザを使います。ブラウザを完全に省けるのはAPIキーだけです。
setup-tokenの有効期間は?
Anthropicのドキュメントによると1年です。一度だけ表示され、どこにも保存されないので、ターミナルを閉じる前に保存してください。
Claude ProかMaxが必要?
コード貼り付けログインとsetup-tokenにはClaudeのサブスクリプションが必要です(setup-tokenはPro、Max、Team、Enterpriseが必要)。APIキーはサブスクリプション不要で、Console経由で課金されます。
ノートPCの ~/.claude をサーバーにコピーしてもいい?
そうする人もいますが、ドキュメント化されたログイン方法ではなく、プロバイダーが認証情報をローテーションするとコピーしたものは使えなくなることがあります。別のコンピューターでサインインを再利用するためのドキュメント化された方法はsetup-tokenです。
Raspberry PiやVPSでも同じ?
同じです。手順はハードウェアには依存せず、マシンにブラウザがないかどうかだけで決まります。