检查是否允许没有 ssh-key 的 root 访问

Jie*_*wit 1 bash login shell-script key-authentication

我想通过 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
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

ilk*_*chu 5

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

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

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


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