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

coo*_*j86 9 security ssh password

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

我实际上以前做过一次,但我找不到旧的脚本或文档。失落的一天。:-/

coo*_*j86 11

我找到了我的旧脚本:

ssh -v -n \
  -o Batchmode=yes \
  -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null \
  DOES_NOT_EXIST@localhost 2>&1 | grep password
Run Code Online (Sandbox Code Playgroud)
  • -o Batchmode=yes选项会导致非交互模式,在这种模式下,回退到密码会导致失败。

  • -v会导致显示身份验证方法(除其他外)。

  • -n原因,ssh到不打开外壳(常与施工中),在这种情况下将导致其立即退出(以防万一你要连接到一个蜜罐或类似serveo.net一种服务,让客户无需认证)

  • -o StrictHostKeyChecking=no-o UserKnownHostsFile=/dev/null自动接受主机而不将其写入 known-hosts 文件。

  • 2>&1将调试消息 (stderr) 转发到日志记录系统 (stdout) 以便grep可以发挥其魔力

如果对某些用户启用了密码身份验证,据我所知,它将显示为对所有用户启用(但在提示后失败)。我怀疑这是为了让您无法确定系统上存在用户。

这样我就不会再丢失它了:https : //coolaj86.com/articles/testing-if-ssh-allows-passwords/