Как я могу программно определить доступные типы аутентификации ssh?

Я хотел бы написать плагин мониторинга, который проверяет различные хосты в моей сети, чтобы убедиться, что пароль или интерактивная аутентификация SSH не включены. То есть, Мне нужно написать код, который:

  1. Подключается к порту SSH.
  2. Перечисляет доступные методы аутентификации.
  3. Проверяет, что возможна только аутентификация на основе ключа.

Методы с использованием кода python или bourne sh (с использованием ssh ) мне наиболее интересно, но другие языки, библиотеки или подсказки тоже приветствуются.

8
задан Stef 27 August 2010 в 15:15
поделиться

3 ответа

Я сейчас собираю один, однако вы можете заставить ssh выводить (в STDERR) поддерживаемые методы, используя параметр PreferredAuthentications. Это можно легко проанализировать с помощью grep/python/language по выбору.

HostA$ ssh -o PreferredAuthentications=none HostB
Permission denied (publickey,gssapi-with-mic).
HostA$ ssh -o PreferredAuthentications=none HostC
Permission denied (publickey,gssapi-with-mic,password,keyboard-interactive,hostbased).
13
ответ дан 5 December 2019 в 08:50
поделиться

Если вам нужно решение *nix , вы также можете подключиться к источникам OpenSSH. Если вам подходит Windows - вы также можете попробовать некоторые коммерческие библиотеки .NET, они намного удобнее, чем исходники OpenSSH :)

-1
ответ дан 5 December 2019 в 08:50
поделиться

RFC 4252, который определяет аутентификацию в SSH, говорит следующее:

Методы аутентификации идентифицируются по их имени, как определено в [SSH-АРКА]. Метод "none" зарезервирован и НЕ ДОЛЖЕН быть указан как поддерживается. Однако он МОЖЕТ быть отправлен клиентом. Сервер ДОЛЖЕН всегда отклонять этот запрос, если только клиенту не должен быть предоставлен доступ без какой-либо аутентификации, и в этом случае сервер ДОЛЖЕН принять этот запрос. Основная цель отправки этого запроса — получить список поддерживаемых методов с сервера.

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

7
ответ дан 5 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: