回答:
これを行う1つの方法は、Googleが提供するGoogle Authenticatorというツールを使用することです。
libpam-google-authenticatorをインストールします
sudo apt-get install libpam-google-authenticator
編集/etc/pam.d/sshd
してモジュールを含めます:
sudoedit /etc/pam.d/sshd
そして、ファイルの先頭にこの行を含めて保存します:
auth required pam_google_authenticator.so
SSH構成ファイルを編集して、チャレンジをオンにします。
sudoedit /etc/ssh/sshd_config
次に、応答認証を次から変更します。
ChallengeResponseAuthentication no
に
ChallengeResponseAuthentication yes
そして、ファイルを保存します。
sudo restart ssh
SSHを再起動するには
走る google-authenticator
別のデバイスで認証コードを受信するには、これらのいずれかが必要です。
パスワードを使い捨てパスコードと組み合わせると、2要素認証であることに注意してください。「知っていること」(パスワード)と「持っているもの」(パスコード生成デバイス)を組み合わせます。一方、使い捨てのパスコードとSSHキーペアを組み合わせた場合、それはすべて「持っているもの」になります。2つの認証要素が同じタイプの場合、2要素認証はありません。これは「1.5因子認証」とも呼ばれます。
Google Authenticatorはパーソナルサーバーには適していますが、既存のIDインフラストラクチャとうまく連携しない場合があります。他のオプションを検討する場合は、RADIUSを認証プロトコルおよびpam-radiusプラグインとして使用することを検討してください。エンタープライズ指向の2要素認証システムはすべて、半径をサポートしています。Ubuntuにpam-radiusを介してWiKID二要素認証を追加する方法に関するドキュメントを作成しました。
radiusを使用すると、SSH以外のシステムを同じ認証サーバーに結び付けることができます。また、認証リクエストをfreeradius経由でLDAPにルーティングし、次に2FAサーバーにルーティングして、認証と認証を分離することもできます。AD btwでも同じことができます。
前に説明したように(現在は修正済み)、次の行を下部ではなく上部に配置することをすべてのユーザーに推奨します/etc/pam.d/sshd
。
auth required pam_google_authenticator.so
そうしないと、システムはパスワードに対するブルートフォース攻撃を受けやすくなり、2要素認証の最初の部分であるパスワードが危険にさらされます。
最初に確認コードを求められ、次にパスワードが求められます(コードが正しいかどうかは関係ありません)。どちらかが間違っている場合は、両方を再度入力する必要があります。別の方法で設定することもできますが、現在のデフォルトのubuntu(15.04)sshd設定で説明するのは少し難しい変更です。
それが必要な理由の詳細については、この問題を確認してください。