こんにちは、OneLogin担当の川野です。今回はYubiKey5シリーズを利用してYubiKey内に鍵ペアを生成し、それを用いてSSH認証を実現します。SSH認証に秘密鍵を用いることで、より認証を強固にすることはよく知られていますが、YubiKeyを使用することで更に頑丈な認証を実現することができます。秘密鍵をYubiKey内に作成、格納することで物理的にYubiKeyを挿入しない限り、認証を通過しないようにすることが可能です。
目次
- 準備するもの
- 手順
- YubiKeyで秘密鍵を作成する
- YubiKey Managerを利用する場合
- YubiKey PIV Manager(YubiKey Managerの旧バージョン)を利用する場合
- OpenSCをインストールする
- 公開鍵をサーバーに登録する
- クライアントユーザーでログインする
- YubiKeyで秘密鍵を作成する
準備するもの
- YubiKey(今回は5シリーズを使用)
- SSH認証用Linuxサーバー(本記事はCentOS7 を使用しています)
手順
YubiKeyで秘密鍵を作成する
・YubiKey Managerを使用する場合
まずはYubiKeyを管理するためのツールであるYubiKey Managerを以下サイトからインストールします。
developers.yubico.com
Applicationsタブから[PIV]をクリックします。
中央の[Configure Certificates]をクリックします。
証明書画面へ移動するのでAuthenticationタブ上で右下の[Generate]をクリックします。
Self-signed Certificateにチェックを入れて[Next]をクリックします。
鍵暗合方式をRSA2048に設定して[Next]をクリックします。
設定したい鍵の名前を入力して[Next]をクリックします。
鍵の有効期限を設定して[Next]をクリックします。
最後に内容を確認して[Generate]をクリックします。
PINを求められるので入力してメモ帳などに控えておきましょう。
以上でYubiKey内に鍵を生成することができました。
・YubiKey PIV Manager'(YubiKey Managerの旧バージョン)を利用する場合
インストールができたら起動し、YubiKeyを差し込みます。正常に動作すると以下のような画面が表示されます。(すでにYubiKey内に証明書がある場合)
証明書画面へ移動するため[Certificates]をクリックします
次にYubiKey内に秘密鍵を作成します。Authenticationタブで[Generate new key]をクリックします。
証明書の詳細情報を入力して右下の[ OK ]をクリックします。PINを求められるので入力してメモ帳などに控えておきましょう。
OpenSCをインストールする
OpenSCとは様々な物理デバイスとソフトウェアをつなぐことができるオープンソースです。今回の場合、OpenSCがYubiKeyとローカルOSを繋ぎ、鍵ペアの情報を伝えることで認証を実現することができます。
以下サイトのPKCS#11から、お使いのOSに対応したOpenSCをインストールしてください。
公開鍵をサーバーに登録する
正常にOpenSCがインストールされていればYubiKey内の公開鍵を取り出すことができます。ローカルで以下のコマンドを実行します。
ssh-keygen -D /usr/local/opt/opensc/lib/opensc-pkcs11.so
これをLinuxサーバーに転送する必要があるので、一度 id_rsa.pubと名前を付けたファイルに出力します。
ssh-keygen -D /usr/local/opt/opensc/lib/opensc-pkcs11.so >> id_rsa.pub
これをサーバーに転送します。
scp -i {サーバー認証用の既存の秘密鍵} {id_rsa.pubのパス} {転送したいサーバー内のパス}
転送した id_rsa.pubをその鍵を利用したいユーザーディレクトリの所定の場所へコピーする必要があります。今回はcentosユーザーに鍵を適用します。Linuxサーバーにログインし、以下コマンドを実行します。
cat id_rsa.pub >> /home/centos/.ssh/authorized_keys
書き込むことができたか以下コマンドで確認します。
cat /home/centos/.ssh/authorized_keys
クライアントユーザーでログインする
ローカルから作成した秘密鍵を利用してSSHログインします。
ssh -I /usr/local/opt/opensc/lib/opensc-pkcs11.so {ユーザー名}@{サーバーのIP}
秘密鍵のPINを求められるので作成した時に設定したPINを入力します。 正常にログインできれば認証は完了です。
まとめ
YubiKeyの中に秘密鍵を格納することで安全にリモートサーバにSSHする方法を説明しました。YubiKey Managerを使うと簡単にYubiKey内に秘密鍵の生成ができることが確認できました。
秘密鍵の管理が煩雑になっている場合にはYubiKeyを使ってみてはいかがでしょうか?