sshd 不遵守 sshd_config 设置

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 [email protected]

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).

当我再次尝试,输入“yes”后,仍然:

[root@docker-ansible /]# ssh [email protected]

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:
:(

因此看起来它仍然需要密码......

答案1

主机密钥指纹和“您确定要继续连接吗?”提示由你的 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块内,我们正在讨论以用户身份登录ansible,而不是以root
  • PubkeyAuthentication no~ansible/.ssh/authorized_keys不会产生任何效果。
  • HostbasedAuthentication yes:这个可能不会像你想象的那样起作用。

基于主机的身份验证的要求

为了HostbasedAuthentication允许您登录,您来自的主机的主机密钥必须已经存在于远程/etc/ssh/ssh_known_hosts~ansible/.ssh/known_hosts并且要么您的本地主机名必须在系统范围/etc/ssh/shosts.equiv/etc/hosts.equiv 或者~ansible/.shosts您的本地主机名和用户名必须在或中列出~ansible/.rhosts

因此,HostbasedAuthentication这绝对不是您想象中的无需准备、无需密码即可进入的设置。

为了为用户获得完全开放、无需身份验证的设置ansible,请尝试以下匹配块:

Match User ansible
    PermitEmptyPasswords yes
    AuthenticationMethods none

显然,切勿在任何连接到互联网的设备上使用它。

相关内容