如何测试 ssh 服务器是否允许密码?

如何测试 ssh 服务器是否允许密码?

我想测试 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显示身份验证方法(除其他外)。

  • 导致-nssh 无法打开 shell(通常与隧道一起使用),在这种情况下会导致它立即退出(以防您连接到蜜罐或允许客户端无需身份验证的服务(如 serveo.net))

  • -o StrictHostKeyChecking=no-o UserKnownHostsFile=/dev/null自动接受主机,而无需将其写入已知主机文件。

  • 2>&1将调试消息 (stderr) 转发到日志系统 (stdout),这样就grep可以发挥它的魔力了

如果对某些用户启用了密码验证,据我所知,它将显示对所有用户都已启用(但在提示后失败)。我怀疑这是因为您无法肯定地识别系统中是否存在用户。

为了不再失去它:https://coolaj86.com/articles/testing-if-ssh-allows-passwords/

相关内容