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

107

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

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

rjmunro
источник

Ответы:

138

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

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

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

Пример использования:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
Кжетил Йоргенсен
источник
Это отключило аутентификацию с открытым ключом для меня. Однако я указал ssh user @ host -C somecommand. То, что мне довелось работать, это простоssh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll
20

Добавьте следующее к вашему ~/.ssh/config:

PasswordAuthentication no

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

саз
источник
7
если вы не хотите отключать аутентификацию по паролю для всех подключений клиента ssh, вы также можете указать параметры в командной строке. добавьте '-oPasswordAuthentication = no' к вашей команде ssh.
КАС
7
Это не мешает вводу пароля. Сценарий ОП все равно будет зависать.
Джошуа Суинк
11

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

sybreon
источник
4
+1 За не предполагая , что клиент является OpenSSH :-)
КАС
8

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

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