web-dev-qa-db-ja.com

SSHキーベース認証は最初のログイン時にパスワードを要求します

Ubuntu 16.04.1 LTSシステムが新しく、マシンに初めてログインすると、キーベースのSSH認証がアカウントのパスワードを要求し、その後のSSH試行はパスワードを要求せずに機能することに気付きました。

これまでのところ、動作はマシンを再起動することで再現できます。タイムアウトもあるかもしれませんが、私はマシンをセットアップしている最中で、まだ遭遇していません。

一般に、これは侵害されたSSHキーを緩和するため、かなり適切です。ただし、自動化されたプロセスには欠点があります。私の場合、Ansibleによる構成管理。

SSHサーバーの動作はどこで設定されていますか?具体的には、キーベースの認証が成功した場合でも、セッションを開くためにキーが初めて使用されたときだけ、パスワード認証を要求します。

対話型セッションではこの「2要素」のような動作を維持したいが、特定のアカウント(専用のansibleユーザー)に対しては無効にする(つまり、パスワードを要求しない)ようにしたい。

ありがとう!

2
berto

別のスタック交換で答えを見つけました。この動作の理由は、ホームディレクトリが暗号化されているためです!

https://unix.stackexchange.com/a/48910/122815

ホームディレクトリは暗号化されていますか?その場合、最初のsshセッションでパスワードを入力する必要があります。同じサーバーへの2番目のsshセッションは、認証キーを使用しています。この場合、authorized_keysを暗号化されていないディレクトリに移動し、〜/ .ssh/configのパスを変更できます。

これを追跡するには、/var/log/auth.log、具体的には次の行を調べます。

pam_ecryptfs: Passphrase file wrapped

それを検索すると、他のスタック交換の答えが見つかりました。

2
berto

秘密鍵からパスワードを削除すると、SSHエージェントはパスワードを要求しません。質問のようにマシン専用アカウントの名前がansibleであると仮定すると、次のコマンドでそれを実現できます。

Sudo -u ansible ssh-keygen -f ~ansible/.ssh/id_<TYPE> -N ''

または

Sudo ssh-keygen -f ~ansible/.ssh/id_<TYPE> -N ''

アクセス権管理の構成に応じて(<TYPE>を問題のキータイプに置き換えます。たとえば、rsaecdsaed25519など)。


パスワードなしのマシンキーは一般的な方法であり、1つであれば十分安全です。

  • キーを使用してサービスの一意の専用キーを使用します(サービス開発者が使用するキーとは異なります)。

  • 潜在的な侵害の最初の兆候で、キーを置き換え、すべてのauthorized_keysファイルから削除します(前の箇条書きで説明した対策によって促進されます)。

もちろん、マシンファイルへのアクセスを制限するには、キーファイルにアクセスモード0500が必要です。これは、ssh-keygenで作成されたキーのデフォルトのアクセスモードです。

0
David Foerster