5

Я пытаюсь понять, как OpenSSH решает, какой метод обмена ключами использовать. Чего я не вижу, так это как указать метод. Кроме того, я знаю, что каждый ssh-сервер / клиент должен поддерживать как минимум два метода: diffie-helleman-group1-sha1 и diffie-helleman-group14-sha1 , но мне неясно, как сервер и клиент выбирать между двумя , учитывая, что каждая программа должна поддерживать оба. Я думаю, что в каждом случае используется diffie-helleman-group14-sha1 так как он имеет большую группу MODP.

Я могу указать шифр и MAC:

ssh <user@ip> -c aes256-cbc -m hmac-sha1

но, глядя на страницы руководства, я не вижу эквивалентной опции для обмена ключами. Может ли кто-то 1) сказать мне способ указать это 2) объяснить, как ssh выбирает метод? (Я подозреваю, что он всегда выбирает первое в списке, то есть второе никогда не выбирается)

1 ответ1

8

В OpenSSH 5.7 появилась опция KexAlgorithms :

ssh(1)/sshd(8): add a KexAlgorithms knob to the client and server
configuration to allow selection of which key exchange methods are
used by ssh(1) and sshd(8) and their order of preference.

Так что, если у вас есть хотя бы эта версия, вы должны передать -oKexAlgorithms=<kex_list> чтобы указать свои предпочтения.

AFAICT, клиент OpenSSH на самом деле не распечатывает, какой алгоритм kex был согласован, но если вы передадите -vv и посмотрите на строки kex_parse_kexinit , вы увидите список алгоритмов kex (а также списки шифрования, MAC и т.д.). алгоритмы), поддерживаемые клиентом, а затем списки, поддерживаемые сервером. Теоретически, клиент выберет первый алгоритм в своем списке, который также появится в списке сервера (т. Е. Выбор предпочтительнее предпочтения клиента). Таким образом, для списка клиентов a,b,c и списка серверов c,b клиент выбирает алгоритм b .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .