sshのセキュリティといえば、主にパスワード認証、ちゃんとしたところなら鍵認証を設定しているだろう。 (さらに固くするなら、鍵認証のアクセス元も絞ってるかもしれない。)

で、(業務では見たことないけど)さらにセキュリティを強くするならば、鍵+パスワードとか、鍵+ワンタイムパスワードでの二要素認証によるログインを設定することもできる。

一言で二要素認証といっても、設定方法はいくつか種類がある。 自分の把握してる限りだと以下のような方法があるので、環境にあったものを選択しよう。

1. 秘密鍵の使用時にパスフレーズを要求させる

厳密には二要素認証かというと違う気がするが…。 秘密鍵を使用する際にパスフレーズを要求させることで、鍵ファイルだけを持っていても使えないようにする。

既存の秘密鍵にパスフレーズを追加したり、更新することも可能なので、秘密鍵の管理者が自分であればこれでもいいだろう。 ただ逆に言うとパスフレーズを削除もできるので、せっかく鍵を設定してても鍵ファイルをユーザがいじれる場合だと勝手に解除されてしまうこともあるので注意。 二要素認証を強制する、という意味ではちょっと弱いかも。

2. 鍵ファイル+パスワード認証

OpenSSHの6.2以降では、「AuthenticationMethods」という項目を指定することで鍵ファイル+パスワード認証を指定することができる。 設定方法などについてはこちらに記述している。

3.鍵認証orパスワード認証+ワンタイムパスワード認証

ワンタイムパスワードを利用しての認証方法。 GoogleやOATHなど、設定方法はいくつかある。

3-1. Google Authenticatorによるワンタイムパスワード認証を組み合わせる

一番設定が楽かも。 Google Authenticatorを利用しての設定。 iPhoneやAndroidでワンタイムパスワードの管理もできるので、そういった運用を考えるとこれが楽かも。

設定しだいで三要素認証(公開鍵認証+パスワード認証+ワンタイムパスワード認証)もできる。 設定方法等についてはこちらに記述している。

3-2. Yubikey(OATH)によるワンタイムパスワード認証

Yubikeyという、ワンタイムパスワードを生成してくれる物理トークンを用いる認証。 パスワードの生成鍵がどこかに流出してない限り、物理的にモノがないとワンタイムパスワードが生成できないようにできる(もちろん、Yubikeyでは鍵は暗号化されてるので取ってこれない)。

実際に設定した際の内容はこちらに記述している。 Yubikey独自のワンタイムパスワード生成も行えるが、外部のサーバを経由するようなので、OATHでの設定を行っている。

3-3. Authyによるワンタイムパスワード認証

Google Authenticatorのように利用できるツール。 こちらに設定等行ったときの記述がある。

把握してる限りだとこんな感じ。 生体認証のたぐいは見つからなかったけど、そもそもsshで生体認証まで必要ないよね、普通は。