Claude Code の sandbox で macOS から SSH の git pull / push が失敗するときの対処

Claude Code の sandbox で macOS から SSH の git pull / push が失敗するときの対処

2026.10.13

Claude Code の sandbox を有効にしていると、macOS では SSH リモートの git pull / git push を実行して失敗することがありました。

調べてみたところ、macOS の sandbox の仕組みによるものです。

対処は2つあります。sandbox.excludedCommands で git を除外して SSH のまま使う方法と、HTTPS に切り替える方法です。

検証した設定

Claude Code v2.1.296 で試しました。

settings.strict.json
{
  "sandbox": {
    "enabled": true,
    "allowUnsandboxedCommands": false
  }
}

"allowUnsandboxedCommands": false は strict sandbox mode の設定です。

この設定を --settings で渡して起動しました。

claude --settings settings.strict.json

起動したら、sandbox が使えていることを確認します。Claude に Bash ツールで、作業ディレクトリの外へ書き込むコマンドを実行させます。

Bashツールを使って以下のコマンドを実行してください
touch ~/sandbox-write-test.txt

Claude の返答は次のとおりです。

touch ~/sandbox-write-test.txt は失敗しました。

touch: /Users/<USER>/sandbox-write-test.txt: Operation not permitted

原因はサンドボックスの書き込み制限です。書き込みを許可しているのはカレントディレクトリ、$TMPDIR、/tmp/claude などに限られ、ホームディレクトリ直下は含まれていません。そのためファイルは作成されていません。

サンドボックスの設定変更はユーザーが決めることなので、回避は試していません。次のどれかで対応できます。

- ! touch ~/sandbox-write-test.txt をプロンプトに入力し、サンドボックスの外で実行する
- 設定で書き込み許可に ~/ 配下を追加する
- 書き込みテストだけが目的なら、許可されているカレントディレクトリで touch ./sandbox-write-test.txt を実行する。こちらなら私が実行します

sandboxが有効であることを確認できたため、検証に進みます。

発生した事象

SSH リモートのリポジトリで、git関連のコマンドを試しました。

次のコマンドを1つずつ、そのまま実行してください。
git fetch
git pull
git push

結果は以下のとおりで、コマンドが失敗しました。

git fetch が失敗しました。git pull と git push も同じリモート接続を使うため、実行していません。

Received disconnect from UNKNOWN port 65535:1: This proxy requires authentication, and this client did not offer an authentication method, so the connection was refused.
fatal: Could not read from remote repository.

サンドボックスのネットワークプロキシが、GitHub への SSH 接続を認証なしで拒否しています。この環境からは SSH 経由の git 操作ができません。サンドボックス設定の変更は私の判断では行えないため、迂回もしていません。

次のどちらかで進められます。
- ターミナルで ! git fetch && git pull && git push と入力し、このセッション内でサンドボックス外から実行する。
- /sandbox exclude git などで git をサンドボックスの対象外にしたうえで、私にもう一度実行を依頼する。

原因

公式ドキュメントの「git over SSH fails with the sandbox on」に、この症状が載っています。

On macOS, git fetch, git pull, and git push against an SSH remote fail inside the sandbox even when the host is allowed. On Linux and WSL2, they work once the host is allowed. Claude Code tunnels git's SSH connection through the sandbox proxy, and the macOS tunnel can't authenticate to that proxy.

Configure the sandboxed Bash tool

Claude Code は git の SSH 接続を sandbox のプロキシ経由にしています。macOS ではそのトンネルがプロキシに認証できないため、ホストを許可していても失敗します。

解決方法A: excludedCommands で git を除外する

SSH のまま使うなら、git のネットワーク系コマンドを sandbox の外で実行させます。

settings.strict.json に excludedCommands を追加して、Claude を再起動しました。

settings.strict.json
 {
   "sandbox": {
     "enabled": true,
-    "allowUnsandboxedCommands": false
+    "allowUnsandboxedCommands": false,
+    "excludedCommands": ["git fetch *", "git pull *", "git push *"]
   }
 }

この設定にすると、git fetch、git pull、git push をそれぞれ単独で実行して、すべて成功しました。

次のコマンドを1つずつ、そのまま実行してください。
git fetch
git pull
git push
3つのコマンドをすべて実行し、成功しました。

1. git fetch: 出力なし。新しい更新はありませんでした。
2. git pull: Already up to date.
3. git push: Everything up-to-date。プッシュするコミットはありません。

除外にマッチしない呼び出しは、sandbox 内で実行されて失敗します。

Claude に git fetch と頼んだところ、git fetch && git status -sb | head -5 とつないで実行されました。
除外にマッチせず、Broken pipe で失敗しました。
「1コマンドずつ、そのまま実行して」と頼むと避けられます。

除外した git は、sandbox のネットワーク制限とファイル制限の対象外になります。allowedDomains の制限を受けず、~/.ssh の sandbox.credentials の deny も適用されません。

Configure the sandboxed Bash tool の同じ節にも、"The excluded git commands can reach any host, not only the ones in allowedDomains." とあります。

解決方法B: HTTPS に切り替える

リモートの URL を HTTPS に変えます。

git remote set-url origin https://github.com/{GITHUB_ORG}/{REPO}.git

通常であれば上記を実行するだけで問題ありません。permissions.denyの設定によってはエラーが出ることがあります。

私の環境では permissions.deny に Read(//**/*.pem) を設定していたため、HTTPS の git が次のエラーで失敗しました。

fatal: unable to access 'https://github.com/{GITHUB_ORG}/{REPO}.git/': error setting certificate verify locations:  CAfile: /etc/ssl/cert.pem CApath: none

permissions.deny の Read(//**/*.pem) が sandbox 内の Bash にも適用され、git が CA 証明書 /etc/ssl/cert.pem を読めません。

対処としては、Read(//**/*.pem) を Read(~/**/*.pem) のように、ホームの配下だけに狭める方法があります。

/etc/ssl/cert.pem はホームの外にあるので、deny にマッチしなくなります。

ホームの外にある .pem が保護されなくなる点には注意が必要です。CA 証明書は公開情報なので、読めても実質的なリスクは小さいと考えています。

小ネタ: シェルモード(!)なら SSH のままでも git が通る

strict sandbox mode でも、! を付けて打ったコマンドは sandbox の外で実行されるようになっています(詳しくはこちらの記事に書きました)。

そのため、ここまでの設定のままでも ! git fetch は SSH のまま成功します。ただし、毎回自分で打つ必要があります。

おわりに

macOS で sandbox を有効にしたまま SSH リモートの git を使うなら、excludedCommands で除外するか HTTPS に切り替える必要があります。

除外した コマンド は allowedDomains の制限を受けなくなるので、sandbox の制限を保ちたい場合は HTTPS が向いています。


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

この記事をシェアする

AI白書

関連記事