限制某些 SSH 使用者僅使用公鑰身份驗證的最佳方法(禁用密碼身份驗證)
我在 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-keyex
和gssapi-with-mic
)似乎更好的方法是將身份驗證方法簡單地限制為
publickey
:Match User git AuthenticationMethods publickey
這給出了響應“權限被拒絕(公鑰)。
問題:
ChallengeResponseAuthentication
和 有什麼區別KbdInteractiveAuthentication
?為什麼KbdInteractiveAuthentication
在 match 語句中允許但不允許ChallengeResponseAuthentication
?- 該方法是否有任何不利/安全問題
AuthenticationMethods publickey
?- (如果您能幫助我理解
gssapi-keyex
/gssapi-with-mic
以及它們與啟用的 GSSAPI/Kerberos 選項的關係,則額外獎勵)
在 http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-challengeresponseauthentication.html
ChallengeResponseAuthentication
有一個很好的關於和之間區別的總結- 總結是 ChallengeResponse 通常最終只要求輸入密碼(但堅持以互動方式提供)。KbdInteractiveAuthentication
KbdInteractiveAuthentication
並且ChallengeResponseAuthentication
是不同的東西。只是ChallengeResponseAuthentication
在簡單的情況下最終只會提示輸入密碼。
ChallengeResponseAuthentication
是全域設置,不能在Match
子句中指定 - 有關詳細資訊,請參閱sshd_config
手冊頁。
AuthenticationMethods publickey
為使用者明確指定git
應該可以正常工作,並且比禁用您不想要的使用者更好(因為列表可能會更改)。
gssapi
如果您在Kerberos
環境(例如 Active Directory 域)中工作,這些選項就會發揮作用。