GitHubの認証方法変更(2021/8/13)に対する最低限の対処法(SSH接続への切替)

プログラミング

 

GitHubからパスワードが使えなくなるってメールが来てるけど、最低限、何をすれば良いの?

 

自分のようなGitHub初心者の方向けに、最低限の対処法を整理しました。

 

度々、GitHubから以下のようなメールが届いていました。

 

Hi XXXX,

You recently used a password to access the repository at XXXX/YYYY with git using git/####.

Basic authentication using a password to Git is deprecated and will soon no longer work. Visit https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information around suggested workarounds and removal dates.

Thanks,
The GitHub Team

 

リンク先の説明を見てみると、大まかには、

 

  • パスワードだけでGitHubにアクセスできる今の状態は危ないので、2021/8/13以降はできなくするよ。
  • もっとセキュリティの高いアクセス(認証)方法に変更してね。

 

ということのようです。

 

期限が迫ってきたので対応したのですが、予想どおり色々と苦労したので、最低限やれば良い対処法を整理しました。

 

要点は、以下のとおりです。

 

  • SSH接続か、アクセストークン認証どちらか1つをやっておけば良い
  • SSH接続を選択する場合: ←本記事ではこちらの方法を説明
    • ローカルPC内で公開鍵・秘密鍵を生成し、GitHubに公開鍵を登録する
    • ローカルPC内の既存プロジェクトをgit pushする場合:
      • configファイルの「url=」をSSH接続のURL(git@…)にしておく
    • ローカルPC内にプロジェクトをクローンしてからgit pushする場合:
      • SSH接続のURL(git@…)でgit cloneする
    • git push・git clone時は、GitHubのUsernameと、パスフレーズ(鍵生成時に作成)を入力する ※次回以降、省略可能
  • アクセストークン認証を選択する場合: ※本記事では説明を割愛
    • GitHub上でトークンを生成する
    • ローカルPC内の既存プロジェクトをgit pushする場合:
      • configファイルの「url=」をHTTPS接続のURL(https://…)にしておく
    • ローカルPC内にプロジェクトをクローンしてからgit pushする場合:
      • HTTPS接続のURL(https://…)でgit cloneする
    • git push・git clone時は、GitHubのUsernameと、生成したトークンを入力する ※次回以降、省略可能

 

素人ゆえ、間違っているかもしれませんので、お気づきの点があれば是非ご指摘ください。

 


40代からプログラミング(Flutter)を始めて、GooglePlayAppStoreに初アプリを公開したhalzo appdevです。

 

作成したアプリはこちら↓

シンプルメモ帳「BasicMemo」 – 文字数カウント、ワンタッチ入力、タグ管理等の便利機能を搭載

Google Play で手に入れよう
Download on the App Store

 

スポンサーリンク

2021/8/13以降できなくなること

詳細はこちら(公式サイト)に記載があります。

 

 

一番影響があるのは、

 

ターミナルのコマンドラインからGitHubにアクセスできなくなる(git push、git pull、git cloneなどができなくなる)

 

という事です。これは確かに困りますね。。

 

何をしなければならないか

 

公式サイトやQiitaの皆様の記事を勉強した結果、パスワード認証よりもセキュリティレベルの高いGitHubへのアクセス方法は、以下2つだと理解しました。

 

  1. 秘密鍵・公開鍵をあらかじめ設定した上で、SSH接続により、GitHubにアクセスする
  2. アクセストークンを取得した上で、HTTPS接続をし、パスワードの代わりにアクセストークンを入力してGitHubにアクセスする

  

また、これとは別に、GitHubのウェブサイトにブラウザでサインインする際、「2要素認証にする」という方法があります。

 

ややこしいのは、ここで2要素認証を設定すると、ターミナルからHTTPS接続する際に、アクセストークンでの認証が必須になる、という点です。

 

当初、これらを混同してしまい、2要素認証、アクセストークン、SSH接続(秘密鍵・公開鍵の設定)の全部をやらないといけないと思ってしまいました。

 

ただ、実質的には上記1と2はどちらかしか使えません(「git remote set-url」コマンドで、接続をHTTPSかSSHのいずれかに切り替える必要がある)。

 

ネット上の記事を見ると、利用者が多いのは「SSH接続」という印象です。

  

そのため、「とりあえずコマンドラインからGitHubにアクセスし続けたい」というだけなら、上記2(SSH接続)だけ対処すれば良いと思います。

 

以下では、SSH接続の設定方法について説明します(PCはMacを前提にしています)。

 

SSH接続の設定方法

以下の公式サイトの「GitHubにSSHで接続する」の章でわかりやすく説明されています。

 

 

新しいSSHキーを生成

ターミナルを開き、以下のコマンドを実行します。実行する場所は、デフォルトのホームディレクトリ(Macの場合、「/Users/ユーザー名」)でOKです。

 

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

 

上記が通らない場合(Ed25519 アルゴリズムをサポートしないレガシーシステムを使用している場合)は、

 

ssh-keygen -t rsa -b 4096 -C "GitHubに登録したメールアドレス"

 

を入れるようです。自分の場合は使いませんでした。

 

以下のように表示されるので、エンターを押していきます。

 

※なお、3行目のパスフレーズ(要はパスワード)は、何も入れずにエンターできます。アクセスの度にパスフレーズ入力するのを省くため、そうする方もいるようです(良いことかわかりませんが、、)。

 

Generating public/private ed25519 key pair. # ←SSHキーが作成される
Enter a file in which to save the key (/Users/you/.ssh/id_ed25519): [Press enter]
Enter passphrase (empty for no passphrase): [Type a passphrase] # ←何も入れないことも可能
Enter same passphrase again: [Type passphrase again]

 

すると下記のような表示が出ます。

 

Your identification has been saved in /Users/Macのユーザー名/.ssh/id_ed25519.
Your public key has been saved in /Users/Macのユーザー名/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:CVukXXXXXXXXXXXXXYIpn+bCm02XXXXXXXXXXNtXzQk 登録メールアドレス
The key's randomart image is:
+--[ED25519 256]--+
|     ..-xo.   . E             |
|    . -.+ x . + .             |
|        . . * = x o +       |
|          . . * X + .         |
|            o B P .           |
|       . . X + .              |
|       .o * + o             |
|      oX.. .                  |
|      o=*                     |
+----[SHA256]-----+

 

1行目の「id_ed25519」というファイルがSSHの秘密鍵、

 

2行目の「id_ed25519.pub」というファイルがSSHの公開鍵で、

 

これらがユーザー名直下の「.ssh」フォルダ内に生成された事がわかります。

 

下段の「fingerprint」や「randomart」は、公開鍵を別の形式で表現したものらしく、最初「どこかにメモしなきゃいけないの?」と戸惑いましたが、いったん気にしなくて大丈夫です。

 

ただ、「fingerprint」の方はコピーしておくと、後で使える場面があります。

 

「ssh-agentに追加」はスキップ

GitHubの公式ページだと、次は「SSHキーを ssh-agent に追加する」に進みます。

 

調べてみると、この対応は、GitHubに、サーバーからアクセスする場合に、役立つと分かりました。サーバーからアクセスするときは、通常、SSHキーをサーバーに保管する必要がありますが、ssh-agentに追加しておくことで、それを回避できるという事です。

 

こちらの記事が大変参考になります。

 

 

また、git pushやgit cloneする度に、パスフレーズの入力を求められるのを避けたい場合にも有効なようです。

 

一方、個人開発をしている自分の場合、PCからしかGitHubにアクセスしないので、関係ないはず、、と考え、ここはスキップしました(Qiitaの記事でも省略されている方が多い印象でした)。

 

ただ、状況に応じて必要な場合は、公式ページの手順に沿って設定いただければと思います。

 

GitHubアカウントに、生成したSSHキー(公開鍵)を追加

まず、Finderから上記で生成した公開鍵のファイル「id_ed25519.pub」(「Users/PCのユーザー名/.ssh/」にある)をテキストエディットなどで開き、中身のテキストを全部コピーします。

 

 

次にGitHubのサイトにサインインして、以下の手順で、コピーした公開鍵の情報を登録します。

 

 

SSHでの接続をテスト

GitHubのサイトに公開鍵の登録が終わったら、自分のPCのターミナルからSSH接続できることを試します。

 

ターミナルを開き、デフォルトのホームディレクトリ(Macの場合、「/Users/ユーザー名」)で以下を実行します。

 

ssh -T git@github.com

 

場合によっては、以下のようなメッセージが出る場合があります。

 

The authenticity of host 'github.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:CVukXXXXXXXXXXXXXYIpn+bCm02XXXXXXXXXXNtXzQk.
Are you sure you want to continue connecting (yes/no)?

 

「yes」を押して進みますが、このとき、前述の「fingerprint」をどこかにコピーしていれば、それと上記の「RSA key fingerprint」を見比べて、一致を確認することができます。 

 

以下のメッセージが出れば、無事SSH接続のテスト完了です。

 

Hi (ここはGitHubのユーザー名)! You've successfully authenticated, but GitHub does not provide shell access.

 

SSH接続でgit pushできるようにする

とはいえ、まだgit pushができるわけではありません。。

 

ローカルPC内にある既存プロジェクトをgit pushする場合と、git cloneでローカルPC内にプロジェクトを持ってきてからgit pushする場合では、異なる対処が必要になります。

 

自分はこの点が分からず、かなり苦労しました。。

 

ちなみにネット記事で多く説明されているのは、後者(git cloneする場合)だと思います。

 

ローカルPC内の既存プロジェクトをgit pushする場合

方法は2通りあります。

 

方法①:「config」ファイルを直接修正する

初めてSSH接続の設定をした場合は、開発プロジェクトのフォルダにある「.git」フォルダ内の「config」ファイルの「url=」の後が、恐らく「https://github.com/xxx…」になっていると思います。

 

これを「git@github.com:xxx…」に修正します。「xxx…」以下の部分は同じです(スラッシュ「/」がコロン「:」に変わっている点が要注意です)。

 

※もし「.git」フォルダが見つからない場合は、Finder内で「command+shift+ピリオド(.)」で隠しファイルを表示させると見つかると思います(プロジェクトのフォルダにGitを導入していることが前提です)。

 

「https://」はHTTPS接続、「git@」はSSH接続を表しており、どちらで接続するかを「config」ファイル内で設定しています。

 

 

なお、「git@github.com:xxx…」の部分は、pushしたい先のリモートリポジトリをGitHub上で開き、「Code」から「SSH」のタブを選択すると表示できるので、ここからコピペすると確実です。

 

 

貼り付け後の状態です↑

 

「config」ファイルの修正後、git push(正確には、「git push origin main」など)すると、GitHubのUsernameとパスワードの入力を求められるので、パスワードには、鍵生成時に作成したパスフレーズを入力します。

 

※パスフレーズを空欄で登録した場合は、入力を求められません。

 

※また、パスフレーズを登録したけど、毎回聞かれて入力するのを避けたい、という場合は、説明をスキップした「ssh-agentに追加」の部分をやっておくと良いようです。

 

以上で、無事、git pushができるようになります。

 

 

※もし、「config」ファイルの「url=」が「https://」のままでgit pushした場合は、HTTPS接続になるので、パスワードの入力欄には、アクセストークンを入力しないとエラーになります(本記事では説明を割愛していますが、公式サイトの説明に従って、アクセストークンの生成作業が必要です)。

 

方法②:コマンドラインで「config」ファイルを変更する

GitHubの公式ページではこの方法が説明されています。

 

 

まず、ターミナルで、Gitを導入している(「.git」フォルダがある)開発プロジェクトのフォルダに移動します。

 

次に、「git remote -v」コマンドで、現在の接続方法を確認します。

 

初めてSSH接続の設定をしたときには、

 

origin  https://github.com/xxxx/yyyy.git (fetch)
origin  https://github.com/xxxx/yyyy.git (push)

 

のように、「https://」で始まるURLが表示されると思います。

 

※「origin」は、GitHub導入時にリモートリポジトリにつけた名前(普通はoriginにするはず)です。

 

これは、現在、HTTPS接続をしていることを示しているので、SSH接続に変更する必要があります。

 

※この時点で、「git@」で始まるURLが表示されている場合は、既にSSH接続になっているため、この後の処理は不要です。

 

git remote set-url」コマンドで、リモートリポジトリの URL を HTTPS から SSH に変更します。

 

git remote set-url origin git@github.com:xxxx/yyyy.git

 

「git@」以降のURLは、上記で説明した方法で確認・コピペすることができます。

 

これで、「.git/config」ファイル内の「url=」の記述がSSH接続に書き換えられます。

 

以降は、①と同様にgit pushできるようになります。

 

ローカルPC内に無いプロジェクトをクローンしてからgit pushする場合

GitHubのリモートリポジトリからローカルPCにクローンするとき、「git clone」の後に記述するURLを、SSH接続用のURLにします。

 

SSH接続用のURLは、前述の「config」ファイル修正のときと同じで、GitHub上でクローンしたいリモートリポジトリを開き、「Code」から「SSH」のタブを選択すると表示できます。

 

URLをコピーして、

 

git clone git@github.com:xxxx/yyyy.git

 

とすると、GitHubのUsernameとパスワードを求められるので、パスワードには、鍵生成時に作成したパスフレーズを入力します(パスフレーズを空欄で登録した場合は、入力を求められません)。

 

その後、ファイルに何らかの変更をして、git pushすることになりますが、このときは「config」ファイルの修正は必要ありません。

 

git cloneした際に、SSH接続のURLを指定しているので、「config」ファイル内の「url=」は、既に「git@github.com:xxx…」になっているからです。

 

これで git push できるようになりました。

 


SSH接続で、git cloneしてからgit pushする方法を説明している情報は多く見つかったのですが、ローカルPC内の既存プロジェクトを、SSH接続でgit pushできるようにする情報が見つけらず、苦労してしまいました。

 

同じような状況の方のご参考になれば幸いです。

 

最後までお読みいただき、ありがとうございました。

 

コメント

タイトルとURLをコピーしました