我想测试 ssh 服务器是否允许密码并立即关闭连接而不实际尝试登录。
像这样:
allows_password=$(ssh --some-option example.com)
if [ -z "$allows_password" ]; then
echo "Insecure Server Options"
else
echo "Insecure Password Access is not Allowed, Great!"
fi
我以前确实做过一次,但我找不到旧脚本或文档。悲伤的一天。:-/
答案1
我找到了我的旧脚本:
ssh -v -n \
-o Batchmode=yes \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
DOES_NOT_EXIST@localhost 2>&1 | grep password
该
-o Batchmode=yes
选项会导致非交互模式,其中回退到密码会导致失败。导致
-v
显示身份验证方法(除其他外)。导致
-n
ssh 无法打开 shell(通常与隧道一起使用),在这种情况下会导致它立即退出(以防您连接到蜜罐或允许客户端无需身份验证的服务(如 serveo.net))-o StrictHostKeyChecking=no
并-o UserKnownHostsFile=/dev/null
自动接受主机,而无需将其写入已知主机文件。2>&1
将调试消息 (stderr) 转发到日志系统 (stdout),这样就grep
可以发挥它的魔力了
如果对某些用户启用了密码验证,据我所知,它将显示对所有用户都已启用(但在提示后失败)。我怀疑这是因为您无法肯定地识别系统中是否存在用户。
为了不再失去它:https://coolaj86.com/articles/testing-if-ssh-allows-passwords/