GitHub CLI を使って GitHub.com に接続する SSH キーを作成する

Today I Learned

解決したい問題

GitHub のリポジトリを git コマンドまたは GUI クライアントツールで操作するとき、Git 操作に慣れていない人が GiHub への認証でつまづくことがある。
たとえば、HTTPS でのリポジトリのクローンでは、ユーザー名と Personal Access Token を入力する。
しかし git コマンドを実行するとパスワードの入力を求めるメッセージが表示される。
誤ってここで GitHub のパスワードを入力してしまうと、認証に失敗する。
また Personal Access Token には有効期限があるため、有効期限が切れると再発行する必要がある。
そのため、筆者は SSH キーでの認証が楽だと感じているが、ssh コマンドによる鍵の作成や公開鍵を GitHub に登録する手順があるため案内するには敷居が高い。

解決策

GitHub CLI を使うと、SSH キーの作成と登録がコマンド 1 つで完了する。

確認した環境

  • GitHub CLI v2.40.1

手順

STEP1:GitHub CLI をインストールする

  1. GitHub CLI の Web サイトからインストーラーをダウンロードしてインストールするか、次のコマンドを実行して Home brew 経由でインストールする。

    brew install gh
    
  2. 次のコマンドでインストールされていることを確認する。

    gh --version
    
    gh version 2.40.1 (2023-12-13)
    https://github.com/cli/cli/releases/tag/v2.40.1
    

STEP2:GitHub CLI で認証する

  1. GitHub CLI で、認証のためのコマンドを実行する。

    gh auth login
    
  2. GitHub のサーバーの種類を設定する。
    今回は GitHub.com の操作をしたいので、「GitHub.com」を選択する。

    ? What account do you want to log into? [Use arrows to move, type to filter]
    > GitHub.com
      GitHub Enterprise Server
    
  3. 認証方法が設定する。
    必ず「SSH」を選択する。

    ? What is your preferred protocol for Git operations on this host? [Use arrows to move, type to filter]
      HTTPS
    > SSH
    
  4. SSH キーを作成して GitHub.com に登録するかを確認される。
    「Y」を入力して Enter キーを押す。

    ? Generate a new SSH key to add to your GitHub account? (Y/n)
    
  5. SSH キーのパスフレーズを設定する。
    入力しても良いが今回は Enter キーを押してパスフレーズの設定をスキップする。

    ? Enter a passphrase for your new SSH key (Optional)
    
  6. GitHub.com で SSH キーを管理するときに使う名前を入力する。
    名前は何でも良いが、今回は「my-pc」と入力して Enter キーを押す。

    ? Title for your SSH key: (GitHub CLI)
    
  7. 鍵を登録するため GitHub.com へのアクセスを要求される。
    アクセス方法には 2 つあるが、ブラウザーを使ったアクセスが楽なので、「Login with a web browser」を選択する。

    ? How would you like to authenticate GitHub CLI? [Use arrows to move, type to filter]
    > Login with a web browser
    Paste an authentication token
    
  8. ターミナルに表示されたワンタイムコードをコピーし、Enter キーを押す。
    Web ブラウザーが起動されるがターミナルは閉じずに、以降の作業を Web ブラウザー上で続ける。

    ! First copy your one-time code: 59C1-3004
    Press Enter to open github.com in your browser...
    
  9. GitHub.com のログイン情報を入力してログインする。

  10. ワンタイムコードを入力する画面が表示されるので、ターミナルに表示されたワンタイムコードを入力し、[Continue]をクリックする。
    画面キャプチャ:ワンタイムコードを入力する画面が表示されている

  11. GitHub CLI にアクセスを許可するかの確認画面が表示されるので、「Authorize GitHub」をクリックする。
    画面キャプチャ:GitHub CLI にアクセスを許可するかの確認画面が表示されている

  12. 認証を完了したことを示すメッセージが表示されたら、Web ブラウザーを閉じる。
    画面キャプチャ:認証が完了したメッセージが表示されている

  13. ターミナルに次のメッセージが表示されれば、SSH キーの作成と登録が完了している。

     Authentication complete.
    gh config set -h github.com git_protocol ssh
     Configured git protocol
     Uploaded the SSH key to your GitHub account: /Users/chick-p/.ssh/id_ed25519.pub
     Logged in as chick-p
    

STEP3:SSH キーの作成と登録が完了したことを確認する

  1. GitHub.com を開き、右上のユーザーアイコンをクリックする。

  2. [Settings] > [SSH and GPG keys] の順で開く。

  3. 「SSH keys」の一覧に、先ほど作成した SSH キーが表示されていることを確認する。
    画面キャプチャ:SSH キーが登録されている

Info

ローカルでは、SSH キーのペアが ~/.ssh 以下に作成されていることを確認できる。

ls ~/.ssh

id_ed25519  id_ed25519.pub

STEP4:動作確認

Git コマンドでプライベートリポジトリをクローンし、問題なく認証できることを確認する。

  1. リポジトリの[Code]をクリックし、「SSH」タブの「git@github.com:〜」から始まる URL をコピーする

  2. 次のコマンドを実行する使ってクローンする。<URL> は先ほどコピーした URL を指定する。

    git clone <URL>
    
    # git clone git@github.com:chick-p/private-repository.git
    Cloning into 'private-repository'...
    
  3. 初回は未知の接続先ホストに対する確認メッセージが表示されるので、「Yes」を入力する。

    git clone git@github.com:chick-p/private-repository.git
    ...
    The authenticity of host 'github.com (20.27.177.113)' can't be established.
    ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
    This key is not known by any other names.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    
    Info

    本来はフィンガープリントが SSH key fingerprints に掲載されているものと一致することを確認する必要がある。

  4. リポジトリがクローンされたことを確認できれば OK。