检查是否允许在没有 ssh-key 的情况下进行 root 访问

检查是否允许在没有 ssh-key 的情况下进行 root 访问

我想通过 BASH 检查是否可以在没有 ssh 密钥的情况下对某个服务器进行 root 访问。因此脚本应该检查您是否可以在没有 SSH 密钥的情况下进行访问。这是我的尝试:(伪代码)

/usr/bin/ssh -o BatchMode=yes -o PreferredAuthentications=password
if [[ "$?" == "255" ]]; then
    echo "root access possible without key"
else
    echo "not possbile"
fi

但此代码不起作用,只是因为错误代码始终相同。无论服务器是否需要 SSH 密钥。我现在的问题是,用哪个命令可以判断服务器是否需要 SSH 密钥才能登录?或者,哪个命令给我一个错误代码来检查它?

我的目标是在整个本地网络中搜索尚未使用 SSH 密钥的服务器

谢谢

答案1

我认为如果不实际尝试正确的密钥或密码或检查服务器配置,您就无法做到这一点。

sshd很高兴地向客户索要密码,即使你PermitRootLogin prohibit-password设置了,密码也永远不会起作用。即使您有密码,它也会要求输入密码PermitRootLogin no,并且即使使用密钥也无法登录。如果我没记错的话,它实际上甚至会通过 PAM 来伪造尝试身份验证,它只是使用已知无效的密码来执行此操作,因此您无法从时间上判断是否允许密码身份验证。这对于AllowUsers等来说是类似的。

当然,此外,使用BatchMode禁用在客户端询问密码(这是手册页中的第一件事),因此 的组合-o BatchMode=yes -o PreferredAuthentications=password不是很有用。


您必须实际登录系统并检查哪些身份验证方法有效。如果您可以使用密钥登录,则该密钥正在使用中。如果您可以使用密码登录,则该密码正在使用。登录后,检查 的值PermitRootLogin是否为yes(默认为prohibit-password),并且 root 是否authorized_keys包含它应该包含的密钥,而不包含其他密钥。

答案2

我希望你不能检查这个。

ssh 服务器不应该让您从服务器外部获取有关其内部配置的此类信息。否则会带来安全风险。

如果您实现了此目标,请将您的技术作为错误报告给 openssh 开发人员。

相关内容