В соответствии сman sshd_config, я могу указать список поддерживаемых шифров, например:
Ciphers arcfour, 3des-cbc
Проблема в том, что клиентское приложение, работающее на одном хосте, не поддерживает тот же шифр, что и остальная часть сети.
Следовательно, есть ли способ указать шифр, который будет использоваться во всех случаях, но с одним исключением для хоста?
решение1
Шифры, перечисленные в Ciphers
директиве, должны идти по первому совпадению, поэтому поместите шифр мошенника-клиента последним в списке. Другие клиенты в вашей сети сначала будут согласовывать шифры выше в списке, если смогут, и ваш мошенник-клиент должен провалиться к более слабому шифру.
К сожалению, это все равно позволит другим клиентам использовать более слабые шифры, если задано явно. К сожалению, вы не можете поместить Ciphers
директиву внутрь Match
блока. Другой вариант, который я могу придумать, — запустить другой сервер на другом порту для нечетного клиента и ограничить доступ ко второму экземпляру sshd для этого хоста.
решение2
Насколько я понимаю, единственный вариант — написать скрипт с использованием ForceCommand.
Использование Match не должно вызвать особых сложностей:
ForceCommand
Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present. The command is invoked by using the user's login shell with the -c option. This applies to shell, command, or subsystem execution. It is most useful inside a Match block.
Вышеизложенное взято из man-страниц. Подробнее я нашел здесь:Скрипт SSHD Gatekeeper
--редактировать--
Лучшее, что я могу придумать, — это запустить отдельный экземпляр SSHD на другом порту, а затем добавить -s к одному из примеров перенаправления, чтобы перехватить только IP-адрес приложения и перенаправить его на другой экземпляр, настроенный с правильным шифром:http://www.cyberciti.biz/faq/linux-port-redirection-with-iptables/