我正在将以下设置添加到基于 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_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
块内,我们正在讨论以用户身份登录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
显然,切勿在任何连接到互联网的设备上使用它。