GitHubで2つのアカウントを使い分けるSSH設定まとめ

追記

私がやりたかったことは コミット名を変えたいだけ だったので、実はもっとシンプルにできました。
リポジトリの .git/config に

git config user.email "個人用のメールアドレス" 
git config user.name "個人用の名前"

これを入れておくだけで、そのリポジトリのコミットは全部そのアカウント名で記録されるようです。

GitHubは コミットのメールアドレスが誰のものか で判断するしくみでした。
なので、VS Codeでどちらのアカウントにログインしているかは関係ありませんでした。

一方、SSH鍵を分けると決まるのは

  • GitHubにログインするときの本人確認
  • どのアカウントとして認証されるか

この2つだけで、“コミットに書く名前” は別の設定 でした。

つまり、SSH鍵を分けてもコミット名は変わらず、コミット名の切り替えには別の設定が必要だった、ということになります。

結果として初心者には少し複雑になってしまいましたが、せっかくなので記録として残しておきます。

鍵をアカウントごとに作成

ターミナルで実行(※メールアドレスは各アカウントに登録されてるもの)

ポートフォリオ用

ssh-keygen -t ed25519 -C "portfolio@example.com"
保存先:~/.ssh/id_ed25519_portfolio

個人用

ssh-keygen -t ed25519 -C "personal@example.com"
保存先:~/.ssh/id_ed25519_personal

パスフレーズは空でもOK(Enterだけで進む)

GitHubに公開鍵を登録

  1. GitHubで各アカウントにログイン
  2. Settings → SSH and GPG keys
  3. New SSH key をクリック
  4. 公開鍵(.pub)の中身を貼り付け

例:

cat ~/.ssh/id_ed25519_portfolio.pub

SSH設定ファイル .ssh/config にルールを追加

nano ~/.ssh/config

存在しなければ新しく作る

Host github.com-portfolio
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_portfolio
  IdentitiesOnly yes

Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  IdentitiesOnly yes

各リポジトリでリモートURLを設定

ポートフォリオ用リポジトリで

git remote set-url origin git@github.com-portfolio:ユーザー名/リポジトリ名.git

個人用リポジトリで

git remote set-url origin git@github.com-personal:ユーザー名/リポジトリ名.git

動作確認(鍵が通るかチェック)

ssh -T git@github.com-portfolio
ssh -T git@github.com-personal

成功すれば

Hi ユーザー名! You've successfully authenticated...

補足

確認系コマンド一覧

現在のGitユーザー設定git config user.name
git config user.email
今のリモートURL(GitHubの場所)を確認git remote -v
鍵ファイルが存在するか確認ls ~/.ssh/id_ed25519_*

グローバル設定

git config –global user.email

これが設定されてると、何も指定してないリポジトリは全部この名前になります。
これが原因で、「SSH分割したのに違う名前でコミットされてる」という現象が起きました。

id_ed25519_とは?

SSH鍵のファイル名にある ed25519 は、「ED25519形式の鍵」という意味です。

ed25519 は暗号の方式(アルゴリズム)の名前で、

RSAより速くて短いのに安全性が高い、今のGitHubでも推奨されている方式 です。

  • id_ed25519 → 鍵の「種類」をあらわす基本の名前
  • id_ed25519_好きな名前 → 自分でつける「区別用の名前」

鍵は何個でも作れるので、後ろの名前は自由につけてOKです。

コメントを残す

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください