Как программно определить доступные типы аутентификации ssh? - PullRequest
8 голосов
/ 27 августа 2010

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

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

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

Ответы [ 4 ]

13 голосов
/ 01 сентября 2010

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

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).
7 голосов
/ 27 августа 2010

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

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

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

0 голосов
/ 26 декабря 2017

Теперь вы можете использовать встроенный скрипт NSE nmap с именем ssh-auth-method , чтобы сделать это:

# nmap -p 22 --script ssh-auth-methods 192.168.1.2

Starting Nmap 7.60 ( https://nmap.org ) at 2017-12-26 00:56 GMT
Nmap scan report for 192.168.1.2
Host is up (0.027s latency).

PORT   STATE SERVICE
22/tcp open  ssh
| ssh-auth-methods:
|   Supported authentication methods:
|     publickey
|_    keyboard-interactive
MAC Address: AA:BB:CC:DD:EE:FF (Apple)

Nmap done: 1 IP address (1 host up) scanned in 2.40 seconds

Кроме того, кто-то создал подобный скрипт на python3 .

0 голосов
/ 27 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...