我想通过 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 开发人员。