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; та же страница руководства