GitHubの複数のアカウントをローカルで使う: SSH + HTTPS
April 07, 2025
HTTPS
1. 現在の環境で使われているcredential managerを確認する。何も表示されない場合は、3.に進む。
git config --get credential.helper2. 使用中のcredential managerをリセットする。
2-1. osxkeychainと表示される場合、macOS keychainを使っているので下記のコマンドで設定をリセットする。1行ずつ入力してエンターを押し、最後のprotocol=httpsを入力した後2回エンター。
git credential-osxkeychain erase
host=github.com
protocol=https2-2 manager(もしくはmanager-core)と表示された場合、Git Credential Managerを使っているので、次のコマンドで設定をリセットする。
echo "protocol=https\nhost=github.com" | git credential-manager erasegit config --global credential.https://github.com.useHttpPath trueこの変更は、下記で確認できる。
git config --global -e4. 個人アクセストークン(PAT)を設定する。
4-1. もしemail認証がまだなら、email認証を確認する。
4-2. Settings > Developer settings > Personal access tokens > Fine-grained tokensに入り、Generate new tokenを押す。
4-3. Token nameを入力し、必要な場合はDescriptionを入力する。
4-4. Resource ownerから使用するアカウントを選択する。Organizationsの設定によっては自分のアカウントが表示されなかったり、リクエストが必要なケースもある。Organizationsを選ぶことも可能。
4-5. Expirationからトークンの有効期限を設定する。
4-5. Repository accessからトークンでアクセスする予定のレポジトリを選択する。Organizationsの設定によってはOnly select repositoriesが表示されない場合もある。
4-6. Permissionsからトークンに付与する権限を選択する。最低限の権限(PoLP)に注意する。REST APIエンドポイントによる権限の詳細はこのリンクを確認。
Private repositoryがcloneできない場合
All repositories、Only select repositoriesを選択した場合表示されるRepository permissionsオプションのpermission付与が必要 ↪︎ Repository permissions > Contents > Access: Read and write
4-7. Generate tokenでトークンを生成する。
4-8. 生成されたトークンをコピーする。
5. git cloneや、既存に存在するリポジトリにアクセスする時、UsernameとPasswordを要求されるが、その時Passwordにトークンを入力する。Gitはremote URLをベースにトークンをキャッシュするので1回のみの入力になる。
SSH
1. SSH key生成。
cd ~/.ssh~/.sshでkeyファイルを管理するので移動する。
処理が速く、容量も小さい上に、セキュリティも強いED25519を使おう。でも環境のためRSA(4096 bit)も記載して置く。
1-1. ED25519の場合
ssh-keygen -t ed25519 -C "example@mail.com" -f "output_keyfile_name"* -t ed25519: algorithmタイプの指定
* -C "example@mail.com": pubに入るコメントの入力。一般的にemailを入れる
* -f "output_keyfile_name": 生成されるkeyファイル名
1-2. RSA (4096 bit)の場合
ssh-keygen -t rsa -b 4096 -C "example@mail.com" -f "output_keyfile_name"* -b 4096: 使うbitを指定。RSAのデフォルトは、3072
2. Passphraseを登録する。
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):上記のssh-keygenコマンドを打つと、Passphraseの入力を要求される。何も入力せず、エンターを押すと、Passphraseは登録されない。これはGitHubに登録する時に必要なパスワードではなく、Private keyを保護するために使うもので、SSH private keyが流出された場合でもこのPassphraseが分からないと使えないのでなるべく登録しよう。
3. 生成されたSSH keyの確認。
Passphraseを設定してエンターを押すと、output_keyfile_name(private key)とoutput_keyfile_name.pub(public key)が生成される。個人用と会社用を作るとしたらそれぞれのemail(-C, commentオプション)とファイル名(-f)で作る。
毎回Passphraseを入力するのは辛いので、ssh-agentを使う。
eval "$(ssh-agent -s)"evalを使ってssh-agentをバックグラウンドで実行させる。
ssh-add ~/.ssh/ed25519_personal
ssh-add ~/.ssh/ed25519_organizationssh-keygen時にファイル名(-f)として指定して生成されたPrivate keyをssh-addでssh-agentに登録する。
ssh-add --apple-use-keychain ~/.ssh/ed25519_personal
ssh-add --apple-use-keychain ~/.ssh/ed25519_organizationmacOSの場合は、--apple-use-keychainを使うことでシェルが新しくなってもPassphraseを入力しなくて済む。
ssh-add -l登録されたkeyは、リストオプション(-l)で確認できる。
5. configの編集。
~/.ssh/configを編集する。もしファイルが存在しない場合はファイルを新しく作る必要があるが、必ず存在しないかを先に確認しよう。
Host gh-p
HostName github.com
# macOSの場合
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/ed25519_personal
Host gh-org
HostName github.com
# macOSの場合
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/ed25519_organization* Host: aliasなので自分ルールで大丈夫
* HostName github.com: SSHのtarget(向き)なので、変えてはいけない
* UseKeychain yes: 4.で入れたssh-add --apple-use-keychainを使うため
* AddKeysToAgent yes: ssh-addを毎回しなくても済む
* IdentityFile: Private keyの場所
6. GitHubに登録。
6-1. Settings > SSH and GPG keysに入り、New SSH keyを押す。
6-2. Titleはkeyのラベルのようなものなので分かりやすい名前を付ける。
6-3. Key typeは今回はAuthentication目的なので、Authentication Keyを選択する。Signing keyはコミット署名時に使う。
6-4. Keyには、ssh-keygenで生成されたPublic keyを貼る。今回のケースだと、~/.ssh/ed25519_personal.pub
ターミナル環境では、下記コマンドでコピーできるが、もちろん好きなエディターでコピーしても良い。
pbcopy < ~/.ssh/ed25519_personal.pub7. 接続もろもろ
7.1 下記コマンドで接続テストをしてみる。
ssh -T git@gh-p
ssh -T git@gh-orgHi user_name! You've successfully authenticated, but GitHub does not provide shell access.と表示されればOK。user_nameは、アカウント別に名前が違う場合はそれぞれ違う。
7.2 GitHubリポジトリのClone時の基本パスが下記のようなら、
git@github.com:account/repository.git⇩
git@gh-p:account/repository.gitのようにgit@の右の部分(Host alias)を~/.ssh/confgで設定したHost(Host alias)に置き変える必要がある。接続テストで打ったのと一緒。
7.3 .git/configの修正を忘れないようにしよう。
git config --global user.name
git config --global user.email
git config --local user.name
git config --local user.emailで一回は確認し、違う情報でリポジトリに変更を加えないように注意しよう。
localが優先されるので、
git config user.name
git config user.emailから確認されるのは、--localと同じで、リポジトリの.git/configで確認できる。
--globalは、
git config --global -eで確認できる。