Вопрос: Как сделать сбой ssh, а не запрашивать пароль, если аутентификация с открытым ключом не удалась?


У меня есть сценарий, на котором ssh'es несколько серверов используют аутентификацию с открытым ключом. Один из серверов остановил доступ к журналу сценария из-за проблемы с конфигурацией, а это означает, что скрипт застревает с приглашением «Пароль:», которое, очевидно, не может ответить, поэтому он даже не пытается использовать остальные серверы в списке.

Есть ли способ сказать клиенту ssh не запрашивать пароль, если проверка подлинности ключа завершается неудачно, а вместо этого просто сообщить об ошибке подключения и продолжится мой сценарий?


88
2017-09-03 10:58


Источник




Ответы:


Для OpenSSH есть также BatchMode, который в дополнение к отключению запроса пароля должен отключить запрос для кодовых фраз для ключей.

Пакетный режим

Если установлено «да», запрос парольной фразы / пароля будет отключен.     Эта опция полезна в сценариях и других пакетных заданиях, где нет     пользователь присутствует для предоставления пароля. Аргумент должен быть     "да или нет". По умолчанию «нет».

Использование образца:

ssh -oBatchMode=yes -l <user> <host> <dostuff>

116
2017-09-03 12:09





Добавьте в свой ~/.ssh/config:

PasswordAuthentication no

и для отключения аутентификации пароля на сервере, добавьте одну и ту же строку в /etc/ssh/sshd_config и перезапустить sshd,


12
2017-09-03 11:19



если вы не хотите отключать аутентификацию пароля для всех подключений клиента ssh, вы также можете указать параметры в командной строке. добавьте '-oPasswordAuthentication = no' в вашу команду ssh. - cas
Это не предотвращает запрос пароля. Сценарий OP по-прежнему будет зависать. - Joshua Swink


Если вы используете dropbear, просто добавьте "-s", чтобы отключить аутентификацию пароля.


9
2017-09-03 11:54



+1 для того, чтобы не предполагать, что клиент открыт :-) - cas


В командной строке (или ~/.ssh/config) вы можете установить PreferredAuthentications,

PreferredAuthentications=publickey

6
2017-09-03 11:39



Я думаю, что в командной строке вам нужно обернуть опцию в кавычки, а затем передать ее в опцию -o. - Craig Walker
@CraigWalker Вы также можете передать его как есть, т. Е. ssh -o PreferredAuthentications=publickey - Tobias Kienzler
@CraigWalker Вам нужны кавычки, если вы хотите использовать пробелы для разделения опции и значения, например. ssh "-oPreferredAuthentications publickey" - Timo