Ssh

限制某些 SSH 使用者僅使用公鑰身份驗證的最佳方法(禁用密碼身份驗證)

  • November 14, 2018

我在 Yosemite 上執行 Mac OS X Server.app,並且我為使用者啟用了 SSH,並使用了預設設置/etc/sshd_config(預設情況下啟用了公鑰和密碼身份驗證)。 但是,我需要限製git本地使用者只能通過 SSH 訪問公鑰。

完全披露,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 User git
     PasswordAuthentication no

這不起作用——我仍然能夠使用使用者名/密碼登錄到 git@my.server :(

但是,添加KbdInteractiveAuthentication no似乎工作正常:

Match User git
     PasswordAuthentication no
     KbdInteractiveAuthentication no

現在我Permission denied (publickey,gssapi-keyex,gssapi-with-mic)嘗試在沒有公鑰的情況下登錄時得到。這似乎表明除了 publickey 之外還有其他方法允許git使用者登錄(即gssapi-keyexgssapi-with-mic

似乎更好的方法是將身份驗證方法簡單地限制為publickey

Match User git
   AuthenticationMethods publickey

這給出了響應“權限被拒絕(公鑰)。

問題:

  1. ChallengeResponseAuthentication和 有什麼區別KbdInteractiveAuthentication?為什麼 KbdInteractiveAuthentication在 match 語句中允許但不允許 ChallengeResponseAuthentication
  2. 該方法是否有任何不利/安全問題AuthenticationMethods publickey
  3. (如果您能幫助我理解gssapi-keyex/gssapi-with-mic以及它們與啟用的 GSSAPI/Kerberos 選項的關係,則額外獎勵)

http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-challengeresponseauthentication.htmlChallengeResponseAuthentication有一個很好的關於和之間區別的總結- 總結是 ChallengeResponse 通常最終只要求輸入密碼(但堅持以互動方式提供)。KbdInteractiveAuthentication

KbdInteractiveAuthentication並且ChallengeResponseAuthentication是不同的東西。只是ChallengeResponseAuthentication在簡單的情況下最終只會提示輸入密碼。

ChallengeResponseAuthentication是全域設置,不能在Match子句中指定 - 有關詳細資訊,請參閱sshd_config手冊頁。

AuthenticationMethods publickey為使用者明確指定git應該可以正常工作,並且比禁用您不想要的使用者更好(因為列表可能會更改)。

gssapi如果您在Kerberos環境(例如 Active Directory 域)中工作,這些選項就會發揮作用。

引用自:https://serverfault.com/questions/679425