Я пишу сценарий для циклического просмотра списка известных имен хостов, чтобы найти рабочий 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"
Спасибо за ответы.
человек 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; та же страница руководства.