# リポジトリに対する認証のトラブルシューティング

codespace においてリポジトリの複製、プッシュ、またはプルを行う際の一般的な認証の問題をトラブルシューティングする方法について説明します。

リポジトリの codespace を作成する際には、通常、追加の認証を行わずに、`git pull` と `git push` を使用して、そのリポジトリに対して変更をプルしたりプッシュしたりできます。 ただし、これらの操作を実行しようとしたときに、認証エラーが表示されることがあります。

codespace を作成したリポジトリ以外のリポジトリを操作しようとすると、エラーが発生する場合もあります。

## あなたが codespace を作成したリポジトリへの認証

codespace を作成したリポジトリに対してプッシュまたはプルしようとしているときに、認証が失敗する場合は、`git@github.com: Permission denied (publickey)` や `Host key verification failed` のようなエラーが表示されることがあります。

これらのエラーが表示される可能性があるのは、GitHub Codespaces のドットファイル リポジトリを使用する場合に、データをリモート リポジトリに転送するために HTTPS 以外のプロトコルを使用するように Git を構成している場合です。 たとえば、次のような行をドットファイルの構成ファイルに含めて、SSH を使用するように Git を構成したとします。

```shell
[url "git@github.com:"]
  insteadOf = https://github.com/
```

GitHub Codespaces は、既定で HTTPS プロトコルを使用し、ユーザーが codespace を作成したリポジトリへの読み取りおよび書き込みアクセス権を含む `GITHUB_TOKEN` 構成を使用して認証します。 codespace では、既定の HTTPS と `GITHUB_TOKEN` を使用することをお勧めします。 通常、`GITHUB_TOKEN` のアクセス許可は、最小限の特権のセキュリティ原則に従って 1 つのリポジトリのみに制限されます。 SSH 認証にはきめ細かいリポジトリ アクセス許可がないため、SSH キーが誤って公開されると、すべてのリポジトリがアクセスされる可能性があります。

既定の HTTPS を使用するには、競合する構成をドットファイルから削除します。 ドットファイル リポジトリにおいて、認識されたファイル内に `install.sh` のようなインストール スクリプトが含まれている場合は、codespace で次のようなロジックを使用して構成を除外できます。

```shell
if [ -z "$CODESPACES" ]; then
  git config --global url."git@github.com".insteadOf "https://github.com"
fi
```

信頼できるリポジトリから作成された codespace で作業しており、SSH を使用する必要がある場合は、自身の GitHub アカウントにリンクしている SSH キーで認証するように codespace が設定されていることを確認します。 詳しくは、「[新しい SSH キーを生成して ssh-agent に追加する](/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)」をご覧ください。

## 作成した codespace とは異なるリポジトリへの認証

codespace の `GITHUB_TOKEN` は、codespace を作成したリポジトリに対する読み取りおよび書き込みアクセス権を持つように構成されます。 既定では、このトークンは他のリポジトリにアクセスできません。 リポジトリを複製できない場合があります。または、複製したリポジトリにプッシュできません。

codespace 内で `GITHUB_TOKEN` の値を手動で更新することはお勧めしません。 プロジェクトで他のリポジトリへのアクセスが必要な場合は、開発コンテナー構成で追加のアクセス許可を一覧表示することで、codespace にこれらのリポジトリへのアクセス権を付与することができます。 これにより、ユーザーは codespace を作成するときに追加のアクセス許可を承認できます。 ただし、既存の codespace のアクセス許可は変更されません。 詳しくは、「[codespace 内の他のリポジトリへのアクセスの管理](/ja/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces)」をご覧ください。

既存の codespace 内の別のリポジトリにアクセスする必要がある場合、または必要なアクセス許可が自分に固有であり、他の共同作成者に適用されない場合は、リポジトリへのアクセス権を持つ personal access token を作成し、そのトークンを codespace に追加できます。 fine-grained personal access token を使用して、アクセス権が必要なリポジトリのみを選択し、必要なアクセス権を **Contents** アクセス許可のみに付与することで、トークンのアクセス権を制限することをお勧めします。 詳しくは、「[個人用アクセス トークンを管理する](/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token)」をご覧ください。

その後、トークンを codespace の環境変数として追加するか、GitHub Codespaces のシークレットとして追加できます。 シークレットを作成する場合は、特定の信頼できるリポジトリにのみシークレットへのアクセスを許可する必要があります。 新しいシークレットを追加すると、既存の codespace を再読み込みして新しいシークレットをプルするように求められます。 詳しくは、「[GitHub Codespaces のアカウント固有のシークレットの管理](/ja/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)」をご覧ください。

codespace で認証にトークンを使用するには、次のオプションがあります。

* 環境変数またはシークレットを作成するときは、`GH_TOKEN` という名前 を使用できます。
  `GH_TOKEN` 変数は、既定で GitHub CLI 操作で使用されるため、 コマンド `gh repo clone OWNER/REPO` を使用してリポジトリを複製できます。

  ただし、その後、`git push` を使用してリポジトリにプッシュしようとすると、Git の認証情報ヘルパーは既存の `GITHUB_TOKEN` を使用して認証を試み、認証は失敗します。 ヘルパーはオーバーライドできますが、codespace を作成した元のリポジトリを操作する際に問題が生じる可能性があります。
* アクセス トークンを含む URL を使用してリポジトリを複製できます。
  `YOUR-VARIABLE` を、作成した環境変数またはシークレットの名前で置き換えます。

  ```shell
  git clone https://USERNAME:$YOUR-VARIABLE@github.com/OWNER/REPO`
  ```

  これにより、特定のリポジトリ用のアクセス トークンが格納されるため、既存の認証情報ヘルパーをオーバーライドせずに、リポジトリにプッシュしたり、リポジトリからプルしたりできるようになります。

  > \[!NOTE]
  > この方法でクローンした場合、トークンは Git 構成に表示されます。 この方法は、信頼できるリポジトリから作成された codespace で作業する場合にのみ使用してください。また、アクセス トークンの範囲は可能な限り制限する必要があります。