Help us understand the problem. What is going on with this article?

SSHの第2要素にTOTPかYubico OTPを利用する

家のサーバにTOTPでログインできるようにすると、当然次はYubico OTPを利用して、YubiKeyをポチっと触るだけでログインできるようにしたくなります。git pushするたびに6桁の数字を確認するのはちょっとたいへん。TOTPの前にYubico OTPを試すように設定してみました。

Ubuntu 18.04 LTSのserver版での作業記録です。作業前には、sshdでは公開鍵認証に加えて外からの接続ではTOTPを要求していました。外からは家庭用ルータのポート転送で接続されます。

YubiKeyの用意

YubiKeyYubico社のハードウェア認証デバイスで、種々の認証プロトコルに対応しています。今回はYubico OTPを利用します。この記事では、2020年7月に購入したYubiKey 5 NFCを利用しています。この多くのモデルでYubico OTPを利用できますが、Yubico OTPを利用できないモデルもあるので購入の際には確認してください。

YubiKey5NFC.jpg

ログイン先に~/.yubico/authorized_yubikeysファイルを下記のような内容で作成します。YubiKeyをUSBポートに挿入してタップするとデフォルトではccccで始まるYubico OTPが入力されます。その最初の12文字でYubiKeyを識別するようです。複数のYubiKeyを利用する場合には同じ行に:(コロン)で区切って12文字を追記します。

<ログイン先ユーザーID>:<YubiKeyをタップした時に入力される文字列の最初の12文字>

sshdの設定

Yubico API Keyの取得

メールアドレスとYubiKeyをYubicoに登録してクライアントIDとシークレットキーをもらいます。今回使うのはクライアントIDのみです。

https://developers.yubico.com/yubico-pam/ で必要事項を記入して、利用規約に同意します。

Yubico PAMのインストール

Yubico CloudにYubiKeyを検証してもらうため、Yubico PAM moduleに従ってPAMをインストールします。

sudo add-apt-repository ppa:yubico/stable
sudo apt update
sudo apt install libpam-yubico

手元では、libpam-yubicoに加えてlibykclient3libykpers-1-1libyubikey0がインストールされました。

PAMの設定

/etc/pam.d/sshdを編集し、sshdが

  1. まず、Yubico OTPでの認証を試し
  2. 次に、TOTPでの認証を試す

よう、common-authの行をコメントアウトして無効にして、直下の行を下記のように編集します。編集後のsshdの再起動は不要です。

#@include common-auth
auth       sufficient   pam_yubico.so id=<上記で取得したクライアントID>
auth       sufficient   pam_google_authenticator.so

/etc/ssh/sshd_configの内容はTOTPのみを有効にしていた時と同様、sshdが公開鍵に加えてPAM経由での認証を要求するよう、そして、ローカルなネットワーク(ここでは192.168.0.0/16)あるいはcronで利用するアカウント(ここではautomationbackup)への接続では公開鍵での認証で充分なようにしておきます。このファイルを編集した場合にはsshdの再起動が必要です。

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Match Address 192.168.0.0/16,::1
       AuthenticationMethods publickey
Match User automation,backup
       AuthenticationMethods publickey
Match all

ログインを試す

この状態でsshするとSSH鍵対での認証が成功してから、Yubikeyのタップを促されます:

Authenticated with partial success.
YubiKey for `<ログイン先ユーザーID>':

手元にYubiKeyが無い場合にはEnterを押すとTOTPを入力できるようになります:

Verification vode:
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away