YosemiteでMacOS X Server.appを実行しており、_/etc/sshd_config
_のデフォルト設定(デフォルトで公開鍵とパスワードの認証が有効)でユーザーに対してSSHが有効になっています。 ただし、SSH経由でのみ公開鍵にアクセスできるようにgit
ローカルユーザーを制限する必要があります。
完全に開示すると、Server.appはいくつかの追加のKerberosおよびGSSAPIオプションを有効にします(ただし、これらが以下の質問にどのように影響するかは100%わかりません)。
_# Kerberos options
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
GSSAPIStrictAcceptorCheck yes
GSSAPIKeyExchange no
_
_/etc/sshd_config
_は次のように述べています。
_# To disable tunneled clear text passwords both PasswordAuthentication and
# ChallengeResponseAuthentication must be set to "no".
_
ただし、ChallengeResponseAuthentication
はmatchステートメントでは許可されていないため、パスワード認証のみを無効にしてみました。
_Match User git
PasswordAuthentication no
_
これは機能しません-私はまだユーザー名/パスワードで[email protected]にログインすることができました:(
ただし、_KbdInteractiveAuthentication no
_の追加は正しく機能しているようです。
_Match User git
PasswordAuthentication no
KbdInteractiveAuthentication no
_
公開鍵なしでログインしようとすると、Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
が表示されます。これは、git
ユーザーからのログインを許可する公開鍵以外のメソッドがまだあることを示しているようです(つまり、_gssapi-keyex
_および_gssapi-with-mic
_)
より良いアプローチは、認証方法を単にpublickey
に制限することのようです。
_Match User git
AuthenticationMethods publickey
_
これにより、「アクセスが拒否されました(公開鍵)」という応答が返されます。
質問:
ChallengeResponseAuthentication
とKbdInteractiveAuthentication
の違いは何ですか?マッチステートメントでKbdInteractiveAuthentication
が許可されているのに、ChallengeResponseAuthentication
が許可されていないのはなぜですか?AuthenticationMethods publickey
_アプローチにマイナス面/セキュリティ上の懸念はありますか?gssapi-keyex
_/_gssapi-with-mic
_と、それらが有効にされたGSSAPI/Kerberosオプションとどのように関連しているかを理解するのに役立つ場合はボーナス)http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-)にChallengeResponseAuthentication
とKbdInteractiveAuthentication
の違いの素晴らしい要約があります。 Challengeresponseauthentication.html -要約すると、ChallengeResponseはパスワードを要求するだけで終わることがよくあります(ただし、パスワードはインタラクティブに提供されると主張しています)。
KbdInteractiveAuthentication
とChallengeResponseAuthentication
は別物です。単純なケースでは、ChallengeResponseAuthentication
がパスワードの入力を求めてしまう可能性があるだけです。
ChallengeResponseAuthentication
はグローバル設定であり、Match
句内で指定することはできません。詳細については、sshd_config
のマニュアルページを参照してください。
git
ユーザーにAuthenticationMethods publickey
を明示的に指定すると、正常に機能するはずであり、不要なユーザーを無効にするよりも優れています(リストが変更される可能性があるため)。
gssapi
環境(Active Directoryドメインなど)で作業している場合は、Kerberos
オプションが役立ちます。
違いがあるかどうかは私には完全にはわかりませんが、少なくとも、ChallengeResponseAuthenticationにはKbdInteractiveAuthenticationが必要なようです。チャレンジレスポンスが有効になっている場合は、自動的にオンになります。
SSH1時代にチャレンジ/レスポンスを思いついたような気がします。 SSH2とのキーボード対話型として標準化されましたが、古い構成が引き続き機能するように、サーバー構成ファイルをすぐに変更しませんでした。
私はopenssh-portableソースで以下を見つけました(20181214現在)。
1685行目から始まるsshd.c:
/* challenge-response is implemented via keyboard interactive */
if (options.challenge_response_authentication)
options.kbd_interactive_authentication = 1;
375行目から始まるsshconnect2.c:
if (options.challenge_response_authentication)
options.kbd_interactive_authentication = 1;