SSH: запретить запрашивать пароль при сбое аутентификации ssh-agent

Я пишу скрипт для циклического просмотра списка известных имен хостов, чтобы найти работающий SSH-сервер, на котором я могу авторизоваться с помощью моего SSH-ключа.

Ключ уже загружен ssh-agent а также ssh-add, поэтому, если я подключаюсь к работающему удаленному хосту, который знает мой ключ, пароль не запрашивается, и я успешно подключаюсь без какого-либо взаимодействия.

Дело в том, что когда удаленный хост не знает мой ключ, ssh подсказывает мне пароль (у него нет шансов на успех, потому что, если бы он мог, он бы уже вошел в систему благодаря ssh-agent). Я хотел бы предотвратить такое поведение и сделать ssh прервать, когда ssh-agent аутентификация не проходит.

В настоящее время я использую следующую команду, чтобы обойти большую часть взаимодействия, но я не могу предотвратить ту, которую я только что описал:

$ ssh -i ~/.ssh/id_rsa                      \
      -o UserKnownHostsFile=/dev/null       \
      -o KbdInteractiveAuthentication=no    \
      -o StrictHostKeyChecking=no           \
      -o PreferredAuthentications=publickey \
      -o ConnectTimeout=1                   \
      $host -n "whoami"

Спасибо за ваши ответы.

2 ответа

Человек ssh_config:

 BatchMode
         If set to ``yes'', passphrase/password querying will be disabled.
         This option is useful in scripts and other batch jobs where no
         user is present to supply the password.  The argument must be
         ``yes'' or ``no''.  The default is ``no''.

Хотя ответ BatchMode, безусловно, правильный, я также хочу упомянуть, что вы также можете сделать: -o PasswordAuthentication=no; та же страница руководства

Другие вопросы по тегам