Решение этого ответа было таким:
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 +
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
, попытается прочитать что-нибудь со стандартного ввода, поскольку обычные механизмы предотвращения чтения терминала фоновым процессом не работают.
Вы не можете узнать, сработает ли это, даже не попробовав. Есть множество вещей, которые могут пойти не так.
В вашем случае, просмотрев справочную страницу ssh_config , я вижу, что есть опция «PasswordAuthentication», для которой можно установить значение no. Глядя на страницу руководства ssh , я вижу, что есть параметр '-o', который можно использовать для отправки параметров конфигурации программе.
Таким образом, я думаю, вы можете использовать это, чтобы отключить аутентификацию по паролю и получить то, что хотите.