共通サーバーを共有するサーバーがたくさんありますTrustedUserCAKeys
。すべてのサーバーではなく、特定のサーバーに特定のアクセス権を付与するようにユーザー証明書に署名したいと思います。
たとえば、次のコマンドは、すべてのサーバーでrootとしてログインするために使用できる証明書を生成します。
ssh-keygen -s ca -I example -n root id_rsa.pub
次のコマンドを試しましたが、役に立たない証明書が生成されました。
ssh-keygen -s ca -I example -n root@server1 id_rsa.pub
server1にはrootとしてのみログインでき、他のサーバーにはログインできない証明書を生成する予定です。これがそのサーバーのserver1
FQDN(またはの完全な内容)であることを確認しました。/etc/hostname
ホストに触れることなくこれを達成する方法はありますかsshd_config
?
ベストアンサー1
ファイルを変更しない場合、通常、sshd_config
答えは「いいえ」です。これを達成するメカニズムはAuthorizedPrincipalsFile
(またはAuthorizedPrincipalsCommand
)を設定することです。このディレクティブがない場合、デフォルトの動作sshd_config
は、認証試行のユーザー名を文字通り証明書に含まれるサブジェクトの1つとしてリストする必要があることです。これが「root」は機能しますが、「root@server1」が機能しない理由です。
'root@server1'を使用する証明書が機能するには(エントリを追加する必要はありません/root/.ssh/authorized_keys
)AuthorizedPrincipalsFile
、rootユーザーの証明書を設定し(以降、OpenSSHバージョンではMatch
ブロック内でこのディレクティブを受け入れる)、 'root@server1'を一覧表示するします。 、他のサーバーでも同様の操作を行います。また、それを拡張して、「root @ dev」や「root @ *」などのサーバーグループに適した証明書を許可することもできますAuthorizedPrincipalsFile
。
.ssh/authorized_keys
これを行うもう1つの方法は、cert-authority
オプションを使用してファイルにCAキーと許可されたプリンシパルを明示的に一覧表示することですprincipals=
。これは、sshd
Authorized_Keysファイル形式のマニュアルページの説明に含まれています。