YubiKeyをSSHの鍵にしてみた!

サーバー

こんにちは。水珈琲(@mizucoffee)です。

今回は、YubiKeyに秘密鍵を入れてSSHの鍵にしてみたいと思います!

Sponsored Links

環境

サーバー:CentOS Linux release 7.6.1810 (Core)
クライアント:macOS Mojave 10.14.6(18G84)

現状は、秘密鍵を使った認証を導入しているんですが、各デバイスに持たせるのがいよいよ辛くなってきたので一つに統合してみよう!と思いチャレンジしてみました。

鍵を生成する

yubico-piv-tool -s 9a -a generate -o public.pem

というコマンドを使って、鍵のペアを生成します。YubiKey内で生成され、公開鍵のみをPCに書き出します。

YubiKeyに登録出来るのは2048ビットまでなので注意しましょう。

公開鍵の自己署名証明書を登録する

自己署名証明書は、公開鍵が本当に対象の秘密鍵のものかを証明するために必要なものです。

yubico-piv-tool -a verify-pin -a selfsign-certificate -s 9a -S "/CN=SSH key/" -i public.pem -o cert.pem

というコマンドで証明書を作り、

yubico-piv-tool -a import-certificate -s 9a -i cert.pem

というコマンドでインポートします。

これで鍵、及び証明書の登録は完了です。

サーバーへ公開鍵を登録

ssh-keygen -D opensc-pkcs11.so

というコマンドを実行すると、OpenSSH形式の公開鍵が出力されます。
なので、サーバーが手元にある場合はYubiKeyを挿して

ssh-keygen -D opensc-pkcs11.so >> ~/.ssh/authorized_keys

とします。もし遠くにある場合は一度id_rsa.pubに書き出して転送しましょう。

サーバーへSSH

ssh -I opensc-pkcs11.so user@example.com

とすると、PINを聞かれるので入力すると接続できます!

Macでのpkcs11が使えない現象

もしエラーが出て使えない時は

https://qiita.com/aoya6i/items/ce39f030ca0483628a19

こちらの記事を参考にssh-agentのオプションを追加してみてください!

まとめ

わりと簡単に鍵を導入することが出来ました。
普通の秘密鍵より安全にできるのでぜひ挑戦してみてください!