2021年8月13日以降、GitHubはGit操作におけるパスワード認証を廃止し、個人アクセストークン、SSHキー(開発者向け)、OAuthまたはGitHubアプリインストールトークンなどの強力な認証を必須にしたという発表がありました。 (https://github.blog/2021-08-16-securing-your-github-account-two-factor-authentication/)
また、2021年5月に、Git操作のSSH認証は、従来の公開鍵と秘密鍵のペアの代わりに、FIDOセキュリティーキーをサポートしたということも発表しました。 (Security keys are now supported for SSH Git operations | The GitHub Blog)
SSHキー生成の時、秘密鍵はPCではなく、セキュリティーキーに保存されます。そして、認証の時、キーにタッチするのも必要です。
つまり、GitHubのウェブサービスとGit操作どちらでも同じYubiKeyを使って、2要素認証を行えます。
GitHubのウェブサービスの2要素認証を設定するには、GitHubでYubiKeyの二要素認証を設定 (yubion.com)をご参照ください。
今回の記事は、YubiKeyを使用したGitのSSHアクセスを紹介いたします。
環境:
OS: Windows
Security Key by Yubico with NFC
鍵の生成:
SSHキーペア生成と使用は、今までの方法と非常によく似ています。
1. YubiKeyをUSBポートに挿し込んでおきます。 2. 管理者としてGit Bashを開きます。 (WindowsにはFIDO2セキュリティーにアクセスするには管理者権限が必要です。) 3. 以下のコマンドを入力して、SSHキーを生成します。
「sk」はセキュリティーキー(security key)です。
$ ssh-keygen -t ed25519-sk -C "your_email@example.com"
注意:コマンドが失敗し、「invalid format(無効な形式)」または「feature not supported(機能をサポートしていない)」というエラーが表示される場合、ed25519をサポートしていないセキュリティーキーを使用している可能性があります。ed25519代わりに、ecdsaを試してください。
今回使っているSecurity Key by Yubico with NFCのフォームウェアは5.1.2なので、ed25519のキーを生成できないので、ecdsaのキーを生成しました。
Ed25519キーを使いたい方はYubiKeyフォームウェア5.2.3以降をご使用ください。
YubiKey ManagerでYubiKeyのフォームウェアを確認
4. YubiKeyのFIDO2 PINを入力し、キーをタッチします。 5. 「Enter a file in which to save the key」が表示されたら、Enterキーを押して、 公開鍵をデフォルトのファイルの場所に保存します。 6. 公開鍵ファイルのパスワードを作成します。
SSHキー生成の例
GitHubアカウントに新しいSSHキーを追加:
SSHキーが生成されたら、他のSSHキーと同じように、新しいキーをアカウントに追加します。下記はGitHub.comのサイトにSSHキーを追加する方法です。
1. 先ほど生成した「id_ecdsa_sk.pub」ファイルから、SSHの公開鍵をコピーします。 2. GitHub.comにアクセスし、設定ページを開き、「SSHとGPGキーのページ」に移動し、 コピーした公開鍵を新しいキーに貼り付けて、追加します。
SSHキー追加の例
SSHアクセス確認:
1. YubiKeyをUSBポートに挿し込んでおきます。 2. 管理者としてGit Bashを開きます。 (WindowsにはFIDO2セキュリティーにアクセスするには管理者権限が必要です。) 3. 以下のコマンドを入力して、SSHキーアクセスを確認します。
$ ssh -T git@github.com 4. 公開鍵ファイルのパスワードを入力し、YubiKeyをタッチします。
SSHアクセス確認の例
上のイメージのように表示されたら、FIDOセキュリティーキーを使ったSSHアクセスの設定が完了しました。
最後に:
今回YubiKeyを使用したGitのSSHアクセスを紹介しました。これで秘密鍵をハードウェアセキュリティーキーに保存し、簡単で、安全な2要素認証を運用できると思います。
しかし、いくつか足りない所もあるようですね。
1. FIDO2のPINはSSHキー生成の時だけ要求されます。
また、FIDO2のPINを使うには、前提として、PIN設定が必要です。
PINをまだ設定していないFIDO2セキュリティーキー、またはFIDO U2Fのみのキーは PIN認証のステップはなくなって、キータッチだけになります。 2. FIDO2生体認証まだサポートしていません。