SSHを使用してGitリポジトリをローカル環境へクローンしたい

# はじめに
Git リポジトリをローカル環境へクローンするために参照するGitHub の公式ドキュメントが複数あるため、備忘録として記事にアウトプットします

参照 : [SSH を使用したGitHub への接続](https://docs.github.com/ja/authentication/connecting-to-github-with-ssh)


# 既存のSSH キーの確認

1. [ターミナル]を開く

1. 以下を実行して、既存のSSHキーが存在するか確認する（ディレクトリはどこでもOK）
    ```:ターミナル
    ls -al ~/.ssh
    ```

1. ディレクトリの一覧から、公開SSHキーをすでに持っているか確認する。既定では、GitHubでサポートされている公開鍵のファイル名は次のいずれか
    + id_rsa.pub
    + id_ecdsa.pub
    + id_ed25519.pub

1. 確認が
    1. できなければ「[新しいSSHキーを生成してssh-agentに追加する](#新しいSSHキーを生成してssh-agentに追加する)」へ

    1. できたら「[SSH接続をテストする](#SSH接続をテストする)」へ

参照 : [既存のSSH キーの確認](https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys)



# 新しいSSH キーを生成してssh-agent に追加する

## 新しいSSH キーを生成する

1. [ターミナル]を開く

1. 以下を実行する（"<foo>your_email</foo>@example.com"を自分のGitHub アカウントのメールアドレスに置き換える）
    ```:ターミナル
    ssh-keygen -t ed25519 -C "your_email@example.com"
    ```

1. 指定したメールアドレスをラベルとした「id_ed25519」という名前の新しいSSH キーが作成される

## SSH キーをssh-agent に追加する

1. 以下を実行して、バックグラウンドでssh-agent を開始する
    ```:ターミナル
    eval "$(ssh-agent -s)"
    ```

1. 以下を実行してconfig ファイルが規定の場所に存在するかどうかを調べる
    ```:ターミナル
    open ~/.ssh/config
    ```
    1. ファイルがない場合は、`touch ~/.ssh/config`を実行してファイルを作成する

1. config ファイルの中身を以下の内容に変更する
    ```:configファイル
    Host github.com
      AddKeysToAgent yes
      UseKeychain yes
      IdentityFile ~/.ssh/id_ed25519
      ```

1. 以下を実行して、SSH 秘密鍵をssh-agent に追加して、パスフレーズをキーチェーンに保存する
    ```:ターミナル
    ssh-add --apple-use-keychain ~/.ssh/id_ed25519
    ```

1. GitHub で自分のアカウントにSSH 公開キーを追加する
「[GitHub アカウントへの新しいSSH キーの追加](#GitHubアカウントへの新しいSSHキーの追加)」を参照

参照 : [新しいSSH キーを生成してssh-agent に追加する](https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)



# GitHub アカウントへの新しいSSH キーの追加

1. [ターミナル]を開く

1. 以下を実行してSSH 公開キーをクリップボードにコピー
    ```:ターミナル
    pbcopy < ~/.ssh/id_ed25519.pub
    ```

1. GitHub で右上隅にある自分のプロフィールをクリックしてから、[Setting]をクリック
    <img width="300" alt="git1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/c9ea2448-bea9-5232-0eb4-4a05c1c94b28.png">

1. 左側のサイドバーの[Access]にある[SSH and GPG keys]をクリック
    <img width="300" alt="git2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/06cf7f55-d54d-b28d-938c-6102480b3094.png">

1. [New SSH key]をクリック
    <img width="200" alt="git3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/946da061-1941-2527-61a4-8931118cea1a.png">

1. [Title], [Key type]は任意

1. [Key]に先ほどコピーした公開キーをペースト

1. [Add SSH key]をクリック
    <img width="200" alt="git4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/05db855e-6a04-d2a8-079b-10bf503c027e.png">


# SSH 接続をテストする

1. [ターミナル]を開く

1. 以下を実行する
    ```:ターミナル
    ssh -T git@github.com
    ```

1. 以下のメッセージが表示されたらOK
     ```
    Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
    ```
1. 以下のメッセージが出ても、接続できている（っぽい）(その後の挙動に問題なし)
    ```
    git@github.com: Permission denied (publickey).
    ```

# リポジトリをローカルにクローンする

1. GitHub上のクローンしたいリポジトリのページの[Code]から[SSH]のリンクをコピー

1. 以下を実行する(your_repository_codeにコピーしたリンクをペースト)
    ```:ターミナル
    git clone your_repository_code
    ```

1. `ls`でクローンしたリポジトリのフォルダがあることを確認