LDAPサーバーAがあり、ここに登録されているユーザーUがあります。
ほかにサーバーB,Cがあり、それぞれユーザーUでログインできるように設定しました。
サーバーBにユーザーUでログインし、ターミナルからサーバーCにユーザーUでsshのログインをしようとすると、パスワードのプロンプトが出ます。
正しいパスワードを入れれば当然ログインできるのですが、サーバーBにユーザーUでログインしているのだから、わざわざパスワードを入れたくないと思っています。
また、サーバーBでsshの公開鍵を作ってサーバーCに入れなければいけないようなら、LDAPを使わない場合と大して手間が変わりません。
この状態はそもそもおかしいのでしょうか?
セットアップがうまくできていれば、サーバーB上で、"ssh userU@serverC"とすれば何事もなくログインできるものなのか、何か特別な設定が必要なのか、もともとそういうことはできないのかを教えていただけないでしょうか。
ssh のホストベース認証を使うしかないような気がします。
SSHのホストベース認証設定 | Miracle Linux Support
LDAP でパスワード情報を共有しても、ssh コマンド自身が、実行するユーザのパスワードを知ることが出来ません。一般的には、パスワード情報として保持しているのは、パスワードの文字列に対して一方向関数で求めたハッシュ値が保存される(ソルトの話はちょっと脇に置いておきます)ので、パスワード文字列そのものは、パスワードの入力を受けたプログラムが、認証処理時にだけ知っている、というのが通常です。
なので、ssh クライアントが実行しているユーザのパスワードを知ることは出来ません。
そのため、ssh の認証でパスワード認証を使っている場合、サーバ B と サーバ C でパスワードが一致していたとしても、ssh クライアントがパスワード文字列を送ることが出来ないため、ユーザが入力せざるを得ません。
ホストベース認証にすれば、
ホストベース認証とは、sshサーバとクライアントが、ユーザレベルの認証を省略して、直接認証を行う認証方式です。この方式では、サーバに登録済みのクライアントマシンから接続があった場合は、そのクライアントマシンのユーザ情報についても信用して接続を許可します。
となるので、ホストレベルで認証が通れば、ユーザのパスワードとは無関係に、クライアントから要求されたユーザが存在していて有効であれば、許可されることになります。
また、サーバーBでsshの公開鍵を作ってサーバーCに入れなければいけないようなら、 LDAPを使わない場合と大して手間が変わりません。
強いて言えば、LDAP でユーザアカウントの情報を共有していれば、繋ぎ先にアカウントそのものが無い、というケースは心配しなくて良い、という事は言えます。
LDAP の Password アトリビュートでパスワード文字列そのものを保持する、という事は可能なので、その上でスクリプトで ssh コマンドを呼び出して、LDAP から取り出した生のパスワードを渡して、といった事は不可能ではないと思いますが、ssh コマンド単独では無理だと思います。
あと、公開鍵認証でクライアントサイドで ssh-agent を使えば、ssh-agent が動いている間は、鍵のパスフレーズの入力を省ける、というのはありますが、ますます LDAP から遠ざかりますね。
詳しい説明ありがとうございます。
ログイン元がLDAPで認証済みのユーザーかどうかと言うことまではsshは気にしてくれないのですね。
個別のユーザーの認証を省きたいなら、ホスト全体の認証をするしかないと。
よく分かりました、ありがとうございます。
ssh-agentのことは知りませんでした。使ってみようと思います。