Назад | Перейти на главную страницу

Как проверить, разрешает ли 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

Я действительно делал это раньше, но не смог найти ни старых скриптов, ни документов. Печальный день. : - /

Нашел свой старый скрипт:

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 не открывать оболочку (часто используется с туннелированием), что в этом случае приведет к немедленному завершению работы (на всякий случай, если вы подключаетесь к приманке или сервису, например serveo.net, который позволяет клиентам без аутентификации)

  • -o StrictHostKeyChecking=no и -o UserKnownHostsFile=/dev/null автоматически принимает хост, не записывая его в файл известных хостов.

  • 2>&1 пересылает отладочные сообщения (stderr) в систему ведения журнала (stdout), чтобы grep может творить чудеса

Если аутентификация по паролю включена для некоторых пользователей, она будет отображаться как активированная для всех пользователей (но не удастся после запроса), насколько я могу судить. Я подозреваю, что это так, что вы не можете точно определить, что пользователь существует в системе.

И чтобы снова не потерять: https://coolaj86.com/articles/testing-if-ssh-allows-passwords/