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。