SSH - 公開鍵があっても定期的にパスワードが必要です。

SSH - 公開鍵があっても定期的にパスワードが必要です。

公開鍵認証を許可しながら、24時間ごとにユーザーパスワードを入力するように要求するにはどうすればよいですか?デフォルトのホストオペレーティングシステムはDebianです。

答え1

マニュアルページを見るsshd_config(5)何らかの方法でこれを達成するために使用できるいくつかの構成キーワードが見つかりました。

  1. 修正されたものを使用してくださいAuthenticationMethodsMatch詰まった
  2. 使用AuthorizedKeysCommandログインするたびにスクリプトを呼び出して、パスワードが必要かどうかを判断します。
  3. 使用ForceCommandログインが成功したら、カスタムコマンドを実行して必要なパスワードを確認してください。

詳細:

  1. 修正されたものを使用してくださいAuthenticationMethodsMatchブロック:これにより公開鍵認証を無効にするか、また特定のユーザーにはパスワードの確認が必要です。
Match User john
        AuthenticationMethods publickey,password publickey,keyboard-interactive

これにより、ユーザーはjohn公開鍵認証に成功した後にパスワードを入力する必要があります。しかし、定期的に変わります。どのユーザーは少しトリッキーなパスワードを入力する必要があります。 1つの方法は、カスタムスクリプトを変更してsshd_configユーザーを追加/削除し、設定を再ロードするためのシグナルをエクスポートすることですsshd。これは非常に不快なハッキングです。

私が動的に見る唯一の方法は次MatchのとおりですGroup

Match Group need-passwd
        AuthenticationMethods publickey,password publickey,keyboard-interactive

これにより、変更を加えずにsshd_configシステムグループにユーザーを個別に追加/削除することができますneed-passwdsshdその後、ユーザーがグループにいることを確認し、その場合はパスワードも必要です。

  1. 使用AuthorizedKeysCommandログインするたびにスクリプトを呼び出して、パスワードが必要かどうかを判断します。
# ignore existing authorized_keys files by default
AuthorizedKeysFile /dev/null
# instead load allowed authorized_keys using external command
AuthorizedKeysCommand /path/to/external_script.sh
# root is required to be able to read users ~/.ssh/authorized_keys files
AuthorizedKeysCommandUser root

sshdこれを直接確認せずにカスタム~/.ssh/authorized_keysロジックを実装できる場所に提供されているキーを使用してくださいexternal_script.sh。例: * ユーザーの最後の成功したリモートログインの検索 * 24 時間以上前の場合、認証キーを返さないため、公開の無効化が機能します。キー認証*過去24時間以内であれば、以下を返します。~/.ssh/authorized_keys

後者は、ユーザーのホームフォルダにあるファイルを読み取るためにアクセスがexternal_script.sh必要な理由です。root

1.と3.と比較して、このアプローチの欠点は、パスワードのみをログインできるようにするため、実際にセキュリティを低下させる必要があることです。

  1. 使用ForceCommandログインが成功したら、カスタムコマンドを実行して必要なパスワードを確認してください。

sshユーザーがクライアントに提供したコマンドを実行するのではなく、公開鍵を使用してログインに成功した後に実行されます。ForceCommandこのコマンドでカスタムロジック(上記を参照)を実装し、必要に応じて最初にログインパスワードを要求できます。それ以外の場合は、提供されたコマンドラインを実行してください。

ここでの欠点は、正しく理解するのが難しいことです。 *コマンドが実行されるだけです。後ろにログインに成功すると、ユーザーはすでにシステムにログインしています。これは、パスワードを入力する前に、要求されたポート/ X11 / sshプロキシ転送がすでに有効になっている可能性があることを意味します。*提供されたコマンドライン(存在する場合)を正しく処理する必要があるかもしれません。すべての文字列を慎重にエスケープします。

また、パスワード/ログインはカスタムスクリプトによって照会されるため、クライアントはサポート/処理されませんが、ssh有効なパスワードが必要ですtty

認証キーを返す代わりに、方法2と3を組み合わせて行の前にすべてのアクセスオプションを追加し、restrict強制カスタマイズのみを実行できますcommandAUTHORIZED_KEYS_FILE_FORMAT

答え2

これは難しい質問です。このアイデアを思い出す前に、2つの異なるアイデアがありました。

私のアプローチは午前3時にルートクローンジョブを実行し、authorized_keysユーザーファイル名をauthorized_keys.disabled。その後、ユーザー内で.bashrc行の名前をauthorized_keys.disabled変更して、1authorized_keys日のログインで SSH キーを使用できるようにします。

cronエントリは次のとおりです。

00 03 * * * mv --force /home/jennifer/.ssh/authorized_keys /home/jennifer/.ssh/authorized_keys.disabled

項目.bashrcは次のとおりです。

mv --force ~/.ssh/authorized_keys.disabled ~/.ssh/authorized_keys

私の計画に穴があるかもしれません。まだテストしていません。

関連情報