web-dev-qa-db-ja.com

SSH認証:SSHキーまたはワンタイムパスワードのいずれか

私は通常、sshキー認証を使用して(自宅のマシンから)sshするUbuntu 10.04Linuxサーバーを持っています。ただし、パスワードが危険にさらされる可能性のある、安全でない可能性のあるマシン(インターネットカフェ、図書館の公共コンピューターなど)からリモートでSSH接続する必要がある場合があります。この場合、 [〜#〜] otpw [〜#〜] またはSteve Gibsonの Perfect Paper Passwords のようなワンタイムパスワードシステムを使用したいと思います。

サーバーを最初にsshキーをチェックし、次に認証にOTPWシステムを使用するように構成するにはどうすればよいですか? (2人のユーザーを作成する必要がありますか?)

7
mr_schlomo

編集:私自身の質問に答えてすみません! (他の2つの答えは素晴らしいですが、質問に完全に答えるわけではありません。それでも非常に役立ちます!)

OTPassword Pluggable Authentication Module Linux用のPAMにSteveGibsonのPerfectPaperPasswordシステムを実装します。それをインストールすると、PPP認証が得られます。しかし、sshキーのバイパスはどうですか?彼らのサイトのFAQはこの質問に答えます:

リモートシステムに頻繁にログインする信頼できるマシンがある場合は、sshキーを使用します。 ssh-keygenを使用してそれらを生成し、新しい〜/ .ssh/id_rsa.pubをリモートコンピューターの〜/ .ssh/authorized_keysにコピーします。 SSHがキーを使用してユーザーを認証する場合、PAMは省略されます。

便利な自動!

編集: Google Authenticator および Duo Security も良い解決策のようです。紙にワンタイムパスワードを提供することはありません。代わりに、彼らはスマートフォンを使用して、絶えず変化する TOTPキー を生成します。 (Duo Securityは、ワンタイムパスワードをいくつか使用してテキストメッセージを送信することにより、ダムフォンでも機能します。ただし、Duo Securityはローカルではないため、サーバーに依存する必要があります...)

3
mr_schlomo

この方法は1つの認証方法をチェックしませんが、OTPを使用して安全でない/信頼されていないマシンからログインする問題を解決します。

複数のポート(1つは公開鍵認証用、もう1つはOTP認証用)でリッスンするようにSSHデーモンを構成するには、sshd_configファイルに別のポート番号を追加するだけです。

Port 22 # For key-based auth
Port 60000 # For OTP-based auth

2-FAは、Googleの2段階認証テクノロジーに基づいています。ライブラリとプログラムをインストールするには:

$ Sudo apt-get install libpam-google-authenticator

その間に、スマートフォンにGoogle認証システムアプリをインストールします。インストールしたら、ターミナルからプログラムを起動します。

$ google-authenticator

これにより、バーコード、シークレット、および一連のスクラッチコードが提供されます。それらを安全に保つ!!!スマートフォンにアクセスできない場合や緊急アクセスが必要な場合は、これらのコードが唯一の方法です。このバックアップメカニズムの重要性を過小評価しないでください。それは長期的にはあなたを台無しにするかもしれません。 Google認証システムを使用するようにPAMモジュールを構成します。

$ Sudo nano /etc/pam.d/sshd

その後、パスワードログインを無効にするには、@ include common-authの前に#を付けます。また、ファイルの最後に次を追加します。

auth required pam_google_authenticator.so

OTP認証を有効にするには:

$ Sudo nano /etc/ssh/sshd_config

ChallengeResponseAuthenticationというフレーズの行を見つけて、「no」から「yes」に変更します。

PermitRootLogin noPasswordAuthentication noを設定します。

ファイルの最後で、「match」パラメータを使用して、そのポートからマシンにアクセスするために使用する必要がある認証メカニズムを決定します。次に例を示します。

Match LocalPort 22
    PasswordAuthentication no
    AuthenticationMethods publickey
    PubKeyAuthentication yes
​
Match LocalPort 60000
    AuthenticationMethods keyboard-interactive:pam

パラメータ「keyboard-interactive:pam」は、SSHデーモンを強制的にPAMモジュールデーモン(/etc/pam.d/sshdで構成)に移動し、そこで指定されたとおりに認証します(したがって、PAMモジュールからのパスワードログインも無効にする必要があります。 common-auth行をハッシュします)。変更を有効にするには、SSHデーモンを再起動することを忘れないでください。

$ Sudo /etc/init.d/sshd restart

次に、信頼されていないマシンの場合は、ポート60000(または設定したもの)にSSHで接続し、OTPを使用して認証します。

5
Brill

フォールバックとしてOTPを使用した公開鍵認証(それはあなたが意味したことですよね?):

  1. パスワードフォールバックを使用した公開鍵認証は、OpenSSHのデフォルトの動作です
  2. パスワードの検証方法は、PAM構成ファイルで最もよく定義されています
3
sborsky

これは簡単なことですが、避けるべきいくつかの落とし穴もあります。

構成の変更のほとんどは、通常/ etc/ssh/sshd_configにあるsshd_configファイルで行う必要があります。

すでに共有キーが実行されているので、ここではスキップします。

注意したい行は次のとおりです。

PasswordAuthentication yes

注意が必要なのは、誰がどのようにログインできるかを制限することです。できるだけ少数のユーザーグループへのアクセスを制限するために、これらをすべて配置する必要があります。

PermitEmptyPasswords no
AllowUsers [email protected].*
AllowGroups sshusers

ここで設定できるオプションはたくさんあります。利用可能なオプションの完全なセットについては、 manページ を確認してください。

Ssh権限のためだけにグループを設定することをお勧めします。

次のフラグも強く推奨されます:

PermitRootLogin no

これにより、キーが送信/再構成されていない場合、デーモンがパスワードを要求するようになります。必要に応じてOTPWのハードルを追加できますが、理論的には暗号化された環境にいるため、厳密に必要というわけではありません。コードをリンクしたOTPW情報を見ると、最後に更新されたのは2003年のようです。ピアレビューを受けずに使用するのは嫌です。それ以来、安全なコーディング慣行と実際に環境全体が大きく変化しました。

1
Patrick