ことの発端
社内で2要素認証・多要素認証で YubiKey
を採用しました。
で、購入した YubiKey5シリーズ
には FIDO2 (WebAuthn)
のみならず PIV
即ち ICカード
の機能を持っているので、 ssh の公開鍵暗号で使うことにしましたので、 Windowsでの導入手順を示します。
なお、この記事では以下を前提とします。
- 既に ssh の公開鍵暗号方式を使って git のクローンやプッシュを経験している。
-
PIV
機能があるYubiKey
を所有している。 -
SouceTree
での設定例。 1
1. YubiKey
の設定
下記の記事を参考に YubiKey
を設定してください。
※ この記事で説明している取得した公開鍵を GitHub
や Bitbucket
に設定してください。
2. Yubico PIV Tool
をインストール
PKCS11 の認証モジュールが必要になりますので、インストールしておきましょう。
インストール後、インストール先の bin
フォルダ内に libykcs11.dll
へのパスをメモしておきましょう。 (後で登場します)
3. PuTTY-CAC
をインストール
一般的な pageant
はスマートカードに対応しておりませんので、 PuTTY-CAC
を下記 URL よりダウンロードしてインストールしましょう。
スタートアップに登録して先に PuTTY-CAC
の pageant
を起動させておくと便利です。スタートアップへの登録方法は下記を参考にしましょう。
SourceTree
では SSH クライアントの設定
で SourceTree 起動時に SSH エージェントを起動します
のチェックを外しておきます。
4. pageant
に証明書を登録
既に ssh で運用されている方はご存じだと思いますが、Windows 起動後に毎回やらないといけないやつです。
- タスクトレイの
pageant
アイコンを右クリックします。
-
Add PKCS Cert
を選択します。(秘密鍵ファイルの場合はAdd PuTTY Key
ですが、今回インストールしたPuTTY-CAC
のお陰でスマートカードを使用できるようになり、スマートカードの場合はAdd PKSC Cert
を選択します。)
- ファイル選択を
All Library Files (*.dll)
に変更します。
-
Yubico PIV Tools
のインストール先のbin
フォルダにあるlibkcs11.dll
を開きます。 - 公開鍵の選択画面が表示されるので、
その他
をクリックして、今回はSLOT 9A
の証明書を選択します。(スロットについては 「ssh の公開鍵認証方式で YubiKey を使うための準備」 を参照してください)
5. SourceTree を使ってみる
既に設定は終わっていますので、いつものように git でクローンやプッシュを行います。
その際、下記のような PuTTY Authentication
が表示されるので、 YubiKey
の PIN
を入力します。
6. コマンドラインを使ってみる
おまけで、コマンドラインからも使用する場合を説明しておきます。
(SourceTree でうまく接続できない場合、問題の切り分けとして試行する際に使えます)
ssh のコンフィグファイルに下記を追加します。
Host github.com
PKCS11Provider "D:\Program Files\Yubico\Yubico PIV Tool\bin\libykcs11.dll"
github
に接続してみましょう。
ssh git@github.com
すると下記の表示がされますので、 YubiKey
の PIN
を入力し Enter
を押下します。
Enter PIN for 'YubiKey PIV #15801817':
その後、下記のような表示になれば成功です。
PTY allocation request failed on channel 0
Hi terukazu-inoue! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
ちなみに、 windows の git では、デフォルトshell が sigwin の ssh なので、 windows 標準に変更します。(この変更により SourceTree
が使えなくなるので注意)
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
git config --global --unset core.sshCommand
-
コマンドラインを使っても可能です。しかし、
GitHub Desktop
はトークンによるhttps
アクセスを使用するため使用できません。 ↩