GitHubにpushできない?SSH接続の設定方法

GitHubにコードをpushしようとしたとき、エラー(fatal: Authentication failed for ‘https://github.com/…’)が出て困ったことはないでしょうか?

「昨日まで使えていたのに、急に使えなくなった」、「パスワードを何度入力しても弾かれる」そんな経験をしている方は多いはずです。

これはあなたのパスワードが間違っているわけでも、アカウントに問題があるわけでもありません。

GitHubがセキュリティ強化のためにHTTPSのパスワード認証を廃止したことが原因です。

この記事では、SSH接続を使ってGitHubに安全に接続する方法をステップごとに丁寧に解説します。

読み終えるころには、自分でSSHキーを設定してGitHubにスムーズに接続できるようになります。

はじめに

久しぶりにGitHubにコードをpushしようとしたら、エラーが出てpushができませんでした。

セキュリティ強化のためにSSH接続が必要なのはわかっていましたが、設定がめんどくさいという理由でやっていなかったので、実施しました。

設定の所要時間は慣れていれば10〜15分程度で完了すると思います。

問題

GitHubはパスワード認証の根本的なセキュリティ上の弱さを理由にHTTPS経由のパスワード認証を正式に廃止しました。

代替手段として、GitHubが推奨するのは次の2つです。

  • SSH接続:公開鍵・秘密鍵ペアを使った暗号認証
  • Personal Access Token(PAT):パスワードの代わりに使うトークン

この記事ではより堅牢で使い勝手のよい、SSH接続の設定方法を解説します。

解決方法

SSH接続の設定方法は以下の手順になります。

  1. SSHキーを生成する
  2. 公開鍵をコピーする
  3. GitHubに公開鍵を登録する
  4. 接続テスト
  5. cloneできるか確認

前提:使用するターミナル

Windowsの場合、Git Bash(MINGW64)を使うことを推奨しますコマンドプロンプト(cmd)では `cat` などのコマンドが使えないため、途中でつまずくことがあります。

Git BashはGit for Windowsをインストールすると付属してきます。インストールしていない場合は先にインストールしてください。

Step 1: SSHキーを生成する

以下のコマンドを実行。

`-t ed25519` は暗号アルゴリズムの指定で、現在推奨されている方式です。

`-C` の後ろはGitHubに登録しているメールアドレスを入れます。

ssh-keygen -t ed25519 -C "GitHubに登録しているメールアドレス"

実行すると以下のように保存先を聞かれます。

Enter file in which to save the key (/c/Users/ユーザー名/.ssh/id_ed25519):

特にこだわりがなければそのままEnterを押してください。デフォルトの場所(`~/.ssh/id_ed25519`)に保存されます。

続けて、Enter passphrase (empty for no passphrase):でパスフレーズを聞かれます。

セキュリティを高めたい場合は任意のパスフレーズを入力します。

設定しない場合はそのままEnterを押してください。

Step 2: 公開鍵をコピーする

生成した公開鍵の内容をcatコマンドで確認してコピーします。

cat ~/.ssh/id_ed25519.pub

表示された `ssh-ed25519 AAAA…` から始まる1行をメールアドレスも含めて全部コピーします。

Step 3: GitHubに公開鍵を登録する

以下の手順でGitHubに公開鍵を登録します。

  1. GitHubにログイン
  2. 右上の自分のアイコンをクリック → Settings
  3. 左メニュー → SSH and GPG keys
  4. New SSH key をクリック
  5. Title に適当な名前(例:`MyPC`)を入力
  6. Key の欄にStep2でコピーした内容を貼り付け
  7. Add SSH key をクリック

Step 4: 接続テスト

正しく設定できているか確認します。

ssh -T git@github.com

初回接続時は以下のメッセージが表示されます。

これはGitHubのサーバーを「信頼するか?」という確認です。

`yes` と入力してEnterを押してください。2回目以降は聞かれなくなります。

成功すると以下のメッセージが表示されます。

Hi ユーザー名! You’ve successfully authenticated, but GitHub does not provide shell access.

Step 5: cloneできるか確認

最後にクローンができるかを確認します。

git clone git@github.com:ユーザー名/リポジトリ名.git -b ブランチ名

おわりに

SSH接続を設定することで以前より安全・便利にGitHubを使えるようになりました。

最初は少し難しく感じるかもしれませんが、手順は明確で、一度やれば次は迷いません。この記事の手順通りに進めれば、設定を完了させることができます。

一度設定が完了してしまえば、以後は毎回パスワードを入力する必要がなく、むしろHTTPS認証より便利に使えます。

GitHubを使う以上、SSHの設定は避けて通れないので。ぜひこの機会に設定してみてください。