事の発端...
git push時に403エラーが発生
久しぶりにプッシュをしようとした所、「The requested URL returned error: 403」が表示されました。どうやらGitHubの認証が上手くいっていなかったらしいです。
色々な記事を読んでみて、下記のコマンドで資格情報の確認をしてみました。
$ git config credential.helper
すると、MacOSを使っていますので
osxkeychain
と表示されました。下のキーチェーンアクセスから
github.comのパスワード情報を検索しても、見つかりません。どうやら別の所に問題があるのかもしれません。
GitHubのPersonal access tokensの検証
GitHubの設定からDeveloperSettingさらにPersonal access tokensの Fine-grained tokensで生成したものを認証に使ってみましたが、結果的にこれも上手くいきませんでした。
アクセストークンは最初の一回しか表示されないので、画面をスクショしないといけないことに注意、またアカウント名・パスワードを聞かれるタイミングでパスワードの代わりに発行されたトークンを貼って認証しないといけないという何とも分かりずらい仕組み...
こんなに長いトークン値をパスワードとして使うのは使い勝手が悪い。しかも認証もうまくできなかったし...
GitHub公式ブログの確認
下の記事によると2021年8月13日以降、Git操作を認証する際はSSH鍵を使うことを推奨しますと書いてありました。
Git操作のトークン認証要件
SSH接続が有効そうなので、頑張って調べて取り入れてみました。公開鍵認証が実際にどのよう使われているのか手を動かして理解できました。
SSH認証の手順
公開鍵・秘密鍵の作成
GitHubアカウント用の公開鍵・秘密鍵を生成します。ターミナルを起動し、以下のコマンドを実行します。
#.sshディレクトリに移動する
$ cd ~/.ssh
# 公開鍵と秘密鍵のペアを生成する
$ ssh-keygen -t rsa
パスフレーズや鍵の名前など3つの質問が聞かれますが、ここでは簡易的に一つのアカウント認証をするとして、Enterキー3回押してスキップしてOKです。
秘密鍵 id_rsa と公開鍵 id_rsa.pub が生成されました。次のステップでこの公開鍵をGitHubに登録します。
公開鍵をGitHubに登録する
GitHubアカウント上で新規のSSH鍵を登録する。下の新しいSSH keyを選択して新たに作成します。
鍵の中身のクリップボードへのコピーは、下のコマンドでいけます。
$ pbcopy < ~/.ssh/id_rsa.pub
Key内にペーストすると末尾に自身のメールアドレスの情報も付いてくるのでセキュリティ上削除しておきましょう。
configファイルにアカウント情報を記入
configファイルを作成します。
vim ~/.ssh/config
以下の内容を記入します。複数のアカウントを記入できますが、今回は簡単に一つのアカウントを使用するとします。
#メインアカウント
Host github #任意のホスト名
HostName github.com
IdentityFile ~/.ssh/id_rsa #メインアカウントの鍵のファイル
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
GitHubとの接続確認
先ほどファイルに記入したホスト名を使用します。
ssh -T [Host]で接続できます。
$ ssh -T github
下記メッセージが表示されれば成功です。
Hi [メインアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
今回は一つのGitHubアカウントの認証のトラブルシューティングですが、一つのPCで仕事用と私用のアカウントを切り替えたいときはまた気をつけておかないといけない点がありますので、別記事で解説していきたいと思います!