前回FIDO2セキュリティーキーで GitHub SSHアクセス強化 (yubion.com)を紹介いたしましたが、GitHub以外の環境でもFIDOセキュリティーキーでSSHアクセスできるでしょうか?
OpenSSH 8.2の新機能により、すべてのLinuxサーバー(Ubuntu、Debian、CentOS、Fedoraなど)のユーザーがSSHでFIDOセキュリティーキーを使用できるようになりました。
今回の記事は、YubiKeyを使用したLinuxサーバーへのSSHアクセスを紹介いたします。
環境:
OS: Linux Ubuntu 20.04(クライアントとサーバー)
YubiKey 5 NFC
SSHアクセス設定:
SSHキーペア生成と使用は、今までの方法と非常によく似ています。
YubiKeyをUSBポートに挿し込んでおきます。
ターミナルを開いて、以下のコマンドを入力して、SSHキーを生成します。
「sk」はセキュリティーキー(security key)です。
$ ssh-keygen -t ed25519-sk
注意:コマンドが失敗し、「invalid format(無効な形式)」または「feature not supported(機能をサポートしていない)」というエラーが表示される場合、ed25519をサポートしていないセキュリティーキーを使用している可能性があります。ed25519代わりに、ecdsaを試してください。
今回使っているYubiKey 5 NFCのフォームウェアは5.1.2なので、ed25519のキーを生成できないため、ecdsaのキーを生成しました。
Ed25519キーを使いたい方はYubiKeyフォームウェア5.2.3以降をご使用ください。

YubiKey ManagerでYubiKeyのフォームウェアを確認
3. YubiKeyのFIDO2 PINを入力し、キーをタッチします。
4. 「Enter a file in which to save the key」が表示されたら、Enterキーを押して、公開鍵をデフォルトのファイルの場所に保存します。
5. 公開鍵ファイルのパスワードを作成します。

SSHキー生成の例
6. 生成した「id_ecdsa_sk.pub」ファイルから、SSHの公開鍵をコピーして、接続したいサーバーの「~/.ssh/authorized_keys」ファイルに追加します。
FIDOセキュリティーキーでSSHアクセス:
YubiKeyをUSBポートに挿し込んでおきます。
ターミナルを開いて、サーバーにアクセスします。
$ ssh user@server_ip
3. 秘密鍵ファイルのパスワードを入力し、YubiKeyをタッチします。

サーバーへのアクセスの例
上のイメージのように表示されたら、GitHubのように2要素認証としてFIDOセキュリティーキーを使ったSSHアクセスの設定が完了しました。
4. さらに、パスワードなしでログインしたい場合、「Automatically unlock this key whenever I’m logged in」のチェックをオンにして、最初のログイン時だけパスワードが必要になります。
まだまだ終わりませんよ
FIDOセキュリティーキーを正常に設定した後、ユーザーパスワードログインを無効にして、キーを持っている人だけがサーバーにアクセスできるようにしたいでしょうか?
リモートサーバーでコマンドを実行して、SSHデーモン構成ファイルを編集します。
$ sudo nano /etc/ssh/sshd_config
2. 「#PasswordAuthentication yes」行のコメントを解除して、「no」に変更して、以下のようになります。

SSHデーモン構成ファイルの例
3. Ctrl + Xを押し(編集終了)、「y」と入力し(ファイル保存の確認)、Enterキーを押して(ファイル名の確認)ファイルを保存します。
4. 最後にSSHをリロードします。
$ sudo systemctl reload ssh
その後、FIDOセキュリティーキーを使用せずにサーバーに接続すると、以下のようにエラーが表示されます。


エラーの例
最後に:
今回YubiKeyを使用したLinuxへのSSHアクセスを紹介しました。これで秘密鍵をハードウェアセキュリティーキーに保存し、簡単で、安全な2要素認証、または1要素認証を運用できると思います。
しかし、Windows 10のOpenSSHバージョンはまだ8.1なので、クライアントはWindows 10の場合、残念ながらFIDOセキュリティーキーを使えません。
代わりに、YubiKeyのPIV機能を使って、「SSHの秘密鍵をYubiKeyで管理 Windows編 (yubion.com)」できます。