0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

数のGitHubアカウントをSSHで認証したいとき (Mac・Linux向け)

Posted at

コマンドラインからの github に対して認証するとき、 SSH は一番良い方法で、主流である。
➡ git + GitHub を使っている以上、このて手順で自分の端末の GitHub 用 SSH 認証を設定しているでしょう。

GitHub の手順は1つの GitHub アカウントのために十分分かりやすいが、複数の GitHub アカウントを連携して作業したい場合はどうすればいい?

以下、回答してみる!

どんな場合に複数アカウントを使いたくなる?

以下のシナリオで私は複数アカウントを同じ端末で使いたくなったことがある。

  • 仕事の端末で、個人 GitHub アカウントでオープンソースに貢献したい
  • 請負案件で、社内の GitHub で作業しているが、納品するには顧客の repository に顧客が指定したアカウントで PR を作らないといけない

なお、手順だけを知りたければ、複数アカウントをSSHで認証する方法にジャンプして良い。

ただ、認証だから慎重に(内容を完全に理解した上に手順を実施する)やりたければ、
以下で説明している「重要なコンセプト」を先に読む方が良いでしょう。

重要なコンセプト

まず、git != GitHub

書くまでもないことだと言えるかもしれないが、意外と混在しやすいと思う※。

  • git では、ログインしたりする「アカウント」の概念がない
    • global もしくは local のコンフィグに設定している nameuser だけがある
    • git commit する時、その情報が commit(そして log) に含まれる
  • ある GitHub アカウントで端末の設定手順すると、あくまで GitHub に対する認証を行っている

※ 例えば、 新しいプロジェクトに参画する時、GitHub、git アカウントの設定を行うが、そのタイミング以外、git/GitHub アカウントのあたりをあまり意識しなくても、業務ができる。その結果、git/GitHub の関係、設定の理解力が怠ってしまいえる。。。というケースは少なくないと思う!

SSH の概要はなんでしたっけ?

2つコンピューターが安全にやり取りするための protocol である。
SSH により、 client 側が server 側に対して認証し、接続できる。

  • client で private key, public key を生成する
  • client (接続元)で、private key を保持する
  • server (接続先)に public key を置く

SSH で接続するとの INPUT とは?

接続するには、client で以下のものを指定する

  1. host: server の address. github の場合は、(アカウント問わず!) 「github.com
  2. public/private key の pair: アカウントを区別できるように、アカウント毎に public/private の key pairを生成し、アカウントに登録する

例えば、2つの github アカウント、 github.com/abc、 github.com/def があれば、
自分の端末それぞれのための SSH key pair を生成し、該当のアカウントに public key を登録する

生成した key pairs:

認証したいアカウント private key filename public key filename
abc id_ed22519_abc id_ed22519_abc.pub
def id_ed22519_def id_ed22519_def.pub

git→Github に接続する時、INPUT (1) host の決まり方

git の command を使うと、git@github.com-abc:jonathan-h-grebe/notes.git のような URL を指定することになる。※
そこで、例えば URL が git@github.com-abc:jonathan-h-grebe/notes.git の場合には、host が github.com-abc と思えるかもしれないが、そうと限らない!! 実は、その github.com-abc はあくまで ALIAS である。

git clone のように url を直接書く場合もあれば、git pull などで予めに設定されている upstream url を使う場合もあるが、いずれにしても url を指定しているよね

ポイント:ALIAS が config ファイルと比較され、 マッチしたエントリの host が適用される。

git→Github に接続する時、INPUT (2) key の pair の決まり方

以下の画像を示しているように、 ~/.ssh/config に、ALIAS が Host と一致するエントリがあれば、

  • エントリの Hostname が実際の接続で採用される
  • エントリの IdentityFile (GitHub アカウントで 該当の private key が登録されるため、これでアカウント紐付けができる ) で定義されている private key が認証で採用される

スクリーンショット 2024-08-12 20.31.28.png

複数アカウントをSSHで認証する方法

  1. アカウント毎に、public/private key pair を生成する (GitHub 手順の「Generating a new SSH key」① )
    → それぞれのアカウントに、該当の public キーを登録する(「Adding a new SSH key to your account」)
  2. 生成した key を ~/.ssh/config に登録する時(「Generating a new SSH key」の②)、Host を、github.com そのアカウントを識別するための alias に変更する。また、IdentityFile をアカウントと該当する public key へのパスにする ※ALIAS の値任意なのでなんでもいい
  3. それぞれのアカウントを適用したい repository のコンフィグを、該当の ALIAS が適用されるように調整する
    1. git clone する時、GitHub からコピペする SSH URL の host を、ALIAS に変更
    2. git config にて、[remote "origin"]url の host を ALIAS に変更する




以上!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?