GitHubに登録して活動を始めるタイミングでSSHについての設定を何もしなかったので数日間HTTPS接続だったのですが、ようやくSSH接続に切り替えました。その時にやったことをまとめます。
前提
・MacOSのバージョンは Sonoma 14.6.1です。
・GitHubアカウント取得済みで、既にリモートリポジトリへのプッシュを経験しています。
・コード内の<>は筆者によって書き換えたり追加した部分なので、適宜読み替えてください。
1. TerminalでSSH鍵を作成する
SSH接続に必要な公開鍵と秘密鍵を作る前に、まずそれらが既にあるかどうかを確認しましょう。
$ ls ~/.ssh
known_hosts known_hosts.old
SSH鍵(id_<鍵名>
とid_<鍵名>.pub
のセット)がないので作ります。
$ ssh-keygen -t ed25519 -C "<GitHub登録のメールアドレス>"
-t
オプションで鍵タイプ(暗号アルゴリズム)をed25519に指定。ed25519は他のアルゴリズムより優れているとのことで、最近はこちらが推奨されているようです。
-C
オプションは、公開鍵の末尾に追加されるコメントを決めることができます。指定しない場合は、デフォルトで <ユーザー名>@<ホスト名> が入ります。-C ""
でコメントなしにすることもできます。
ssh-keygen
コマンドを実行した結果を下に載せます。途中でエンターとパスワードを求められるので入力してください。このパスワードはまた後で使います。
$ ssh-keygen -t ed25519 -C "<GitHub登録のメールアドレス>"
Generating public/private ed25519 key pair.
Enter file in which to save the key (<ホームディレクトリ>/.ssh/id_ed25519): <エンターを押す>
Enter passphrase (empty for no passphrase): <パスワード入力>
Enter same passphrase again: <パスワード入力>
Your identification has been saved in <ホームディレクトリ>/.ssh/id_ed25519
Your public key has been saved in <ホームディレクトリ>/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:MAtkL7Si+wkIwt9x5kCo1Blhqq3mzm4IoG7dUlP8go4 <GitHub登録のメールアドレス>
The key's randomart image is:
+--[ED25519 256]--+
| += |
| +++o |
| o.++.= |
|=o...o * |
|Bo. o+oS |
|*o. .+*. . |
|O...=.... |
|=* E o |
|==o . |
+----[SHA256]-----+
これで~/.sshフォルダにid_ed25519
とid_ed25519.pub
のふたつのファイルが出来ました。
2. GitHubに公開鍵を登録する
公開鍵(id_ed25519.pub
)の内容をコピーしてGitHubに登録します。
コマンドでコピーする場合はこれ↓。
$ pbcopy < ~/.ssh/id_ed25519.pub
コピーしたらGitHubのサイトに行き、右上にある自分のアイコンをクリックして「Settings」を選びます。
左側のメニューから「SSH and GPG keys」を選び、「New SSH key」ボタンを押します。
「Title」を好きに入力して(私は作成日を入れて"241013公開鍵"としました)、「Key」にさっきコピーした公開鍵をペーストします。
「Add SSH key」 を押したら、GitHub側の設定は完了。
試しにssh
コマンドを実行して、SSH接続してみましょう。鍵を作るときに入力したパスワードを入れて以下のように表示されたら成功です!
$ ssh -T git@github.com
Enter passphrase for key '<ホームディレクトリ>/.ssh/id_ed25519': <パスワード入力>
Hi <GitHubのユーザーネーム>! You've successfully authenticated, but GitHub does not provide shell access.
3. リモートリポジトリのURLを変更
今までHTTPSで接続していたのでリモートリポジトリのURLを確認するとこのようになってました。
$git remote -v
origin https://github.com/<リモートリポジトリ名>.git (fetch)
origin https://github.com/<リモートリポジトリ名>.git (push)
これをSSHのURLに変更します。(GitHubのリポジトリページにある「Code」ボタンを押すとSSHのURLを確認できます。)
$ git remote set-url origin git@github.com:<リモートリポジトリ名>.git
もう一度git remote -v
で確認すると、ちゃんと変更されていました。
$ git remote -v
origin git@github.com:<リモートリポジトリ名>.git (fetch)
origin git@github.com:<リモートリポジトリ名>.git (push)
4. ssh-agentに追加する
ここまでやって、SSH接続でリモートリポジトリへgit push
できるようになったのですが、プッシュするたびにパスワードを要求されるようになりました。
$ git push
Enter passphrase for key '<ホームディレクトリ>/.ssh/id_ed25519': <パスワード入力>
Everything up-to-date
これを解決するために、ssh-agentに追加します。
$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /<ホームディレクトリ>/.ssh/id_ed25519: <パスワード入力>
Identity added: /<ホームディレクトリ>/.ssh/id_ed25519 (<GitHub登録のメールアドレス>)
これで今まで通りgit push
できるようになりました!
$ git push
Everything up-to-date
以上、修正箇所やアドバイスがあればコメントぜひお願いします。
参照
SSH を使用した GitHub への接続 - GitHub Docs
GithubにSSH接続できるのに、Git操作時にエラーが出る場合の確認ポイント - Qiita
githubからsshでクローンする。sshでpushする - Qiita
SSH 鍵の生成 | IBM Cloud 資料
【SSH】ssh-agentの使い方を整理する - Qiita