Networking

sshd 不遵守 sshd_config 設置

  • October 4, 2019

我將以下設置添加到基於 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_configStrictHostKeyChecking.

  • 如果將其設置為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,而不是 as root
  • 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

顯然,永遠不要在任何連接到網際網路的東西上使用它。

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