Ubuntu 16.04.1 LTSシステムが新しく、マシンに初めてログインすると、キーベースのSSH認証がアカウントのパスワードを要求し、その後のSSH試行はパスワードを要求せずに機能することに気付きました。
これまでのところ、動作はマシンを再起動することで再現できます。タイムアウトもあるかもしれませんが、私はマシンをセットアップしている最中で、まだ遭遇していません。
一般に、これは侵害されたSSHキーを緩和するため、かなり適切です。ただし、自動化されたプロセスには欠点があります。私の場合、Ansibleによる構成管理。
SSHサーバーの動作はどこで設定されていますか?具体的には、キーベースの認証が成功した場合でも、セッションを開くためにキーが初めて使用されたときだけ、パスワード認証を要求します。
対話型セッションではこの「2要素」のような動作を維持したいが、特定のアカウント(専用のansible
ユーザー)に対しては無効にする(つまり、パスワードを要求しない)ようにしたい。
ありがとう!
別のスタック交換で答えを見つけました。この動作の理由は、ホームディレクトリが暗号化されているためです!
https://unix.stackexchange.com/a/48910/122815
ホームディレクトリは暗号化されていますか?その場合、最初のsshセッションでパスワードを入力する必要があります。同じサーバーへの2番目のsshセッションは、認証キーを使用しています。この場合、authorized_keysを暗号化されていないディレクトリに移動し、〜/ .ssh/configのパスを変更できます。
これを追跡するには、/var/log/auth.log
、具体的には次の行を調べます。
pam_ecryptfs: Passphrase file wrapped
それを検索すると、他のスタック交換の答えが見つかりました。
秘密鍵からパスワードを削除すると、SSHエージェントはパスワードを要求しません。質問のようにマシン専用アカウントの名前がansible
であると仮定すると、次のコマンドでそれを実現できます。
Sudo -u ansible ssh-keygen -f ~ansible/.ssh/id_<TYPE> -N ''
または
Sudo ssh-keygen -f ~ansible/.ssh/id_<TYPE> -N ''
アクセス権管理の構成に応じて(<TYPE>
を問題のキータイプに置き換えます。たとえば、rsa
、ecdsa
、ed25519
など)。
パスワードなしのマシンキーは一般的な方法であり、1つであれば十分安全です。
キーを使用してサービスの一意の専用キーを使用します(サービス開発者が使用するキーとは異なります)。
潜在的な侵害の最初の兆候で、キーを置き換え、すべてのauthorized_keys
ファイルから削除します(前の箇条書きで説明した対策によって促進されます)。
もちろん、マシンファイルへのアクセスを制限するには、キーファイルにアクセスモード0500
が必要です。これは、ssh-keygen
で作成されたキーのデフォルトのアクセスモードです。