Visual StudioのCopilotに個人用のGitHubアカウントを設定すると、リモートリポジトリの認証に影響してしまう困った症状が発生したため、SSH Keyを使ってマルチアカウント対応する方法についての備忘録。
問題
管理された仕事用のGitHubアカウントをPersonal Access Tokenで利用している環境でVisual StudioのCopilotに個人用のGitHubアカウントを設定すると、リモートリポジトリの認証で仕事用のアカウントが利用できなくなってしまう。
(Visual StudioだけでなくGit ExtensionsやTortoiseGitでも同様の状態になる。)
業務にAIを利用する際は、データのプライバシーやセキュリティ、および知的財産権の観点から、AI利用に関するクライアントの事前了承を得ておくことが必要です。機密情報の扱いに細心の注意を払うだけでなく、AIが生成した成果物が第三者の知的財産権を侵害するリスクも充分に考慮して慎重に利用する必要があります。
原因
Gitの認証にOS管理の資格情報を利用しているため、Visual StudioのCopilot設定で個人用のGitHubアカウントを登録すると、その資格情報が使用されてしまう。
対応
Git認証でPersonal Access TokenではなくSSHキーを利用する。
GitHubでSSH を利用する手順
-
Windows上で仕事用のリポジトリにアクセスするためのSSHキーを作成する。
ssh-keygen -t rsa -b 4096 -C "email_for_work@example.com"
※
email_for_work@example.com
部分は作成したキーを識別できる任意の文字列Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\UserName/.ssh/id_rsa):
のようにSSHキーの保存先を聞かれるので
C:\Users\UserName\.ssh\id_rsa_github-for-work
など、自分でキーを識別できる名称で保存する。
続いて
Enter passphrase (empty for no passphrase): Enter same passphrase again:
のようにパスフレーズを聞かれるので、セキュリティを高めたい場合はパスフレーズを設定します(省略可)。
パスフレーズを設定する場合は、このキーを利用するときにパスフレーズが必要になります。パスフレーズは安全かつ確実な方法で保管してください。
パスフレーズの入力が終わると
Your identification has been saved in C:\Users\UserName\.ssh\id_rsa_github-for-work. Your public key has been saved in C:\Users\UserName\.ssh\id_rsa_github-for-work.pub. The key fingerprint is: SHA256:S19y6udQIYHCW****************VO0suyhXFDrgoM email_for_work@example.com The key's randomart image is: +---[RSA 4096]----+ | . oo++.o | | = o..* o | | . + o+ * . | | . o o .= o | | . . + *S.o + | |E o . @..oo* | | o * o.++. | | o . .+.. | | ..o. | +----[SHA256]-----+
のような表示が行われ
C:\Users\UserName\.ssh
配下にid_rsa_github-for-work
とid_rsa_github-for-work.pub
が出力される。 -
SSHクライアントの設定を行う。
C:\Users\UserName\.ssh\config
ファイルを作成し、以下内容で登録する。複数のアカウントを使い分けたい場合はアカウント毎にHost
とIdentityFile
を登録する。Host github-for-work HostName github.com User git IdentityFile C:/Users/UserName/.ssh/id_rsa_github-for-work
-
GitHubにSSHキーを登録する。
- GitHubにログインし、右上のプロフィールアイコンから
Settings
→SSH and GPG keys
を選択する。 New SSH key
ボタンをクリックする。C:\Users\UserName\.ssh\id_rsa_github-for-work.pub
ファイルの内容をコピーし、Key
欄にペーストする。Title
欄に識別しやすい名前を入力しAdd SSH key
ボタンを押して登録する。
- GitHubにログインし、右上のプロフィールアイコンから
-
ローカルリポジトリにSSHキーをセットする。
コンソールでリポジトリのディレクトリに移動し、以下のコマンドでリモートリポジトリを設定する。
※username/repo.git
部分はアクセスするリポジトリに置き換えてください。git remote set-url origin git@github-for-work:username/repo.git
-
ローカルリポジトリにコミット識別用情報を設定する。
以下のコマンドでコミット用の名前とEメールアドレスを設定する。git config user.name "Your Name" git config user.email "your_email@example.com"
-
リモートリポジトリへの接続確認を行う。
以下のコマンドでリモートリポジトリからフェッチできるか確認する。git.exe fetch -v --progress -- "origin"
初回接続時は
The authenticity of host 'github.com (20.27.177.113)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvv****************DA0zPMSvHdkr4UvCOqU. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])?
のようにホストの認証を求められるので
yes
と入力する。ちなみにTortoiseGitでFetchしたときに
のようなエラーが発生する場合はTortoiseGitのSSHクライアント設定を
c:\Program Files\Git\usr\bin\ssh.exe
に変更することで解決できるのではないかと思います。
以上で設定は完了です。
今回は仕事用のGitHubアカウントをSSH認証で利用しつつ、Visual Studio上のCopilotの個人用のGitHubアカウントをHTTPS認証(Personal Access Token)で使用する方法として紹介しましたが、Copilotに限らず複数のGitHubアカウントを使い分けたい場合に有用な方法ですので、是非試してみてください。
参考ウェブサイトなど
- GitHub Docs
Managing multiple accounts
以上です。