まず、明確にしておきたいのですが、プロンプトなしで公開鍵認証を使用することだけを求めているのではありません。ユーザーにSSH公開鍵認証によるアクセスのみを許可する必要があるユースケースがあります。シリアル端末でパスワードを使用してログインすることは、このユーザーに対して無効にしたいものです。私は独自のLinuxカーネルを構築しているので、authorized_keysファイルを含むホームディレクトリでユーザーが作成されます。/etc/shadowに、ユーザーはパスワードのないエントリ<username>:!:...
を持っています。
私のsshd_configにはPasswordAuthentication no
、PermitEmptyPasswords yes
が含まれていますが、それでもユーザーは、そのユーザーの〜/ .ssh/authorized_keysファイルと一致する正しい秘密鍵IDファイルで拒否されます。 UsePAM no
は、このバージョンのSSHサーバーではサポートされていません(少なくともそれが報告されています)。ユーザーのファイル/フォルダーサーバー側のすべての所有権とアクセス許可が検証されました。
OpenSSHサーバー(sshd)コードと思われるものを確認した後、/ etc/shadowパスワードファイルでロックされたアカウントをチェックします。
https://github.com/openssh/openssh-portable/blob/V_7_4_P1/auth.c#L141
これは、この方法で試すのは愚かだと私に信じさせます。パスワードを設定し、別の方法でシリアルログインを無効にする必要があります。
これは直感的に理解できますが、カーネル(およびopenssh)が、パスワードが設定されていない限りユーザーがログインできないように設計されていることを確認したいと思いました。これに関する公式のドキュメントやWordはありますか?前もって感謝します。
どちらの動作も構成できます。
/etc/shadow
のパスワードフィールドが感嘆符で始まる場合、アカウントはロックされています。アカウントはSSHでログインできず、通常、root以外でアカウントにアクセスしようとすると失敗します。
パスワードに別の無効なパスワードが含まれている場合(通常、Linuxでは単一のアスタリスク)、アカウントにはパスワードがありません(アスタリスクは暗号化されたパスワードの有効なエンコーディングではないため)が、SSH公開鍵認証またはその他の方法でアクセスできます。パスワード以外の意味。
DebianまたはUbuntuを使用している場合は、これらの動作をadduser --disabled-login
およびadduser --disabled-password
で構成できます。
カーネルはこれに関与していません。決定はPAMとsshdによって行われます。
クライアントの公開鍵を$HOME/.ssh/authorized_keys
ファイルに追加します。これにより、あらゆる種類のパスワードプロンプトが無効になります。秘密鍵がパスフレーズで保護されている場合は、ssh-agent
を使用してもらいます。