sshd 不遵守 sshd_config 設置
我將以下設置添加到基於 docker 的 centos 7
/etc/ssh/sshd_config
文件中:Match User ansible PermitEmptyPasswords yes PasswordAuthentication no PermitRootLogin without-password PubkeyAuthentication no HostbasedAuthentication yes
而且我注意到 sshd 不尊重這些設置,至少它仍然要求輸入密碼。在我的設置中,我的
ansible
使用者根本沒有密碼,但我仍然要求它在沒有身份驗證的情況下進入各種機器。但是我確實知道,ssh-copy-id
因為這是一個封閉的 docker 網路,我想繞過他們的密鑰處理,只允許使用者ansible
通過。我知道它不安全,但這僅適用於開發測試環境。
我應該在我的 sshd_config 文件中添加哪些其他設置,以確保我不會被密碼打擾,也不會被要求輸入“是”來接受指紋?
這是我在 docker 內看到的內容:
[root@docker-ansible /]# ssh ansible@portal.docker.local The authenticity of host 'portal.docker.local (172.31.0.2)' can't be established. ECDSA key fingerprint is SHA256:klErLlMAooQXDpAVNAsGoQTt5r+GdjDX06Fgihstteo. ECDSA key fingerprint is MD5:60:4e:1e:6a:05:12:45:e9:21:79:4b:22:0b:1b:a7:cd. Are you sure you want to continue connecting (yes/no)? yes <-- I need to not be typing yes here. Warning: Permanently added 'portal.docker.local,172.31.0.2' (ECDSA) to the list of known hosts. Permission denied (gssapi-keyex,gssapi-with-mic,hostbased).
當我再試一次,輸入“是”後,仍然:
[root@docker-ansible /]# ssh ansible@portal.docker.local Permission denied (gssapi-keyex,gssapi-with-mic,hostbased).
更新:我剛剛嘗試了@telcoM 的想法,雖然感覺很接近,但它不起作用。我的
sshd_config
文件的結尾是這樣的:Match User ansible PermitEmptyPasswords yes AuthenticationMethods none
但現在我得到的錯誤是:
[ansible@docker-ansible ~]$ ssh -o StrictHostKeyChecking=no portal.docker.local ansible@ocker-ansible's password: :(
所以它似乎仍然想要密碼……
主機密鑰指紋和“您確定要繼續連接嗎?” 提示是由您的 SSH 客戶端生成的,而不是遠端的
sshd
。伺服器上的任何配置sshd
都不會改變這一點。您需要在本地個人~/.ssh/config
或本地系統範圍內更改的設置/etc/ssh/ssh_config
是StrictHostKeyChecking
.
- 如果將其設置為
accept-new
,將接受新密鑰,但不會接受先前已知主機上更改的密鑰。- 如果將其設置為
no
,則新的和更改的主機密鑰都將被接受。- 預設設置是
ask
,這是您目前擁有的。- 將其設置為
yes
是最嚴格的選項:使用此設置,SSH 客戶端將永遠不會連接,除非它事先在本地擁有可用的主機密鑰(最大安全性,最小便利性)。現在讓我們分析您的
sshd_config
程式碼段:Match User ansible PermitEmptyPasswords yes PasswordAuthentication no PermitRootLogin without-password PubkeyAuthentication no HostbasedAuthentication yes
PermitEmptyPasswords yes
: 不是很適用,因為你已經設置了PasswordAuthentication no
。這可能仍然會阻止sshd
將無密碼使用者帳戶視為等同於禁用的帳戶。PasswordAuthentication no
:你永遠不會被要求輸入這個使用者的密碼(或者如果你這樣做,這將是一個虛假的提示,只是為了浪費潛在入侵者的時間)PermitRootLogin without-password
:這裡沒有效果,我們在一個Match User ansible
塊內,我們正在談論以 user 身份登錄ansible
,而不是 asroot
。PubkeyAuthentication no
:~ansible/.ssh/authorized_keys
不會有效果的。HostbasedAuthentication yes
: 這個可能不像你想像的那樣工作。基於主機的身份驗證的要求
為了
HostbasedAuthentication
允許您登錄,您來自的主機的主機密鑰必須已經存在於 remote/etc/ssh/ssh_known_hosts
或 in 中~ansible/.ssh/known_hosts
,並且您的本地主機名必須列在系統範圍內**,或者**/etc/ssh/shosts.equiv
您的本地主機名和使用者名必須列在在或。/etc/hosts.equiv
~ansible/.shosts``~ansible/.rhosts
因此
HostbasedAuthentication
,絕對不是您可能想像的無需準備的無需密碼即可進入的設置。要為使用者獲得完全開放、無身份驗證的設置
ansible
,請嘗試使用以下匹配塊:Match User ansible PermitEmptyPasswords yes AuthenticationMethods none
顯然,永遠不要在任何連接到網際網路的東西上使用它。