Могу ли я определить, будет ли успешной аутентификация ключа ssh перед попыткой?

Решение этого ответа было таким:

bindsym XF86KbdBrightnessDown exec --no-startup-id ~/Dropbox/workspace/operacijski/archlinux/keyboard_backlights/kb-light.py -
bindsym XF86KbdBrightnessUp exec --no-startup-id ~/Dropbox/workspace/operacijski/archlinux/keyboard_backlights/kb-light.py +
2
07.05.2016, 21:25
2 ответа

ssh имеет опцию "BatchMode", которая заставит его просто отказывать, а не запрашивать пароль. Это кажется намного проще, чем заставлять ваш скрипт пытаться предсказать, будет ли он запрашивать пароль. В ответе на аналогичный вопрос на SuperUser указывается, что простое отключение PasswordAuthentication не всегда сработает, поскольку существует несколько различных типов интерактивной аутентификации, и это также не похоже на то, что это остановит запрос парольной фразы на ключе.

Вы можете использовать ssh -o BatchMode=yes, или указать это в ssh_config для хоста.


Также, ssh не запрашивает пароль, если нет управляющего терминала (выдается ошибка "read_passphrase: can't open /dev/tty: No such device or address") - вы можете запустить процесс без управляющего терминала с помощью setid, что в идеале следует делать при запуске Jenkins, а не специально для команды ssh (это также предотвратит sudo от запроса пароля, и т.д.)

Обратите внимание, что если вы запустите процесс с помощью setid, он автоматически запустится в фоновом режиме (поскольку shell не может работать с управлением заданиями для процессов в разных сессиях), поэтому вы должны быть готовы к этому, перенаправив его stdout/stderr в файл журнала (а stdin в /dev/null). Вы можете получить странные результаты, если программа, запущенная в setsid, попытается прочитать что-нибудь со стандартного ввода, поскольку обычные механизмы предотвращения чтения терминала фоновым процессом не работают.

5
27.01.2020, 21:54

Вы не можете узнать, сработает ли это, даже не попробовав. Есть множество вещей, которые могут пойти не так.

В вашем случае, просмотрев справочную страницу ssh_config , я вижу, что есть опция «PasswordAuthentication», для которой можно установить значение no. Глядя на страницу руководства ssh , я вижу, что есть параметр '-o', который можно использовать для отправки параметров конфигурации программе.

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

2
27.01.2020, 21:54

Теги

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