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


107

У мене є сценарій, який має декілька серверів, використовуючи аутентифікацію відкритих ключів. Один із серверів перестав пускати вхід у сценарій через проблему з конфігурацією, а це означає, що скрипт застряг із запитом "Пароль:", на який він, очевидно, не може відповісти, тому навіть не намагається решта серверів у списку.

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

Відповіді:


138

Для OpenSSH існує BatchMode, який, крім відключення запиту пароля, повинен відключити запит на пароль (и) для ключів.

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, ви також можете вказати параметри в командному рядку. додайте у команду ssh '-oPasswordAuthentication = ні'.
cas

7
Це не заважає запрошувати пароль. Сценарій ОП все ще висить.
Joshua Swink

11

Якщо ви використовуєте dropbear, просто додайте параметр " -s", щоб вимкнути автентифікацію пароля.


4
+1 за те, що клієнт не припускає, є opensh :-)
cas

8

У командному рядку (або ~/.ssh/config) ви можете встановити PreferredAuthentications.

PreferredAuthentications=publickey

Я думаю, що в командному рядку вам потрібно загортати параметр у лапки і потім передавати його в -о варіант.
Крейг Уокер

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

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