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


107

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

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

Ответы:


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опцию « », чтобы отключить аутентификацию по паролю.


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

8

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

PreferredAuthentications=publickey

Я думаю, что в командной строке вам нужно заключить опцию в кавычки, а затем передать ее опции -o.
Крейг Уокер,

3
@CraigWalker Вы также можете передать его как есть, то естьssh -o PreferredAuthentications=publickey
Тобиас Кинцлер

@CraigWalker Вам нужны кавычки, если вы хотите использовать пробелы для разделения опции и значения, напримерssh "-oPreferredAuthentications publickey"
Timo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.