Назад | Перейти на главную страницу

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

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

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

Для OpenSSH есть режим BatchMode, который помимо отключения запроса пароля должен отключить запрос парольной фразы (фраз) для ключей.

Пакетный режим

Если установлено «да», запрос парольной фразы / пароля будет отключен. Эта опция полезна в сценариях и других пакетных заданиях, где нет пользователя, который мог бы указать пароль. Аргумент должен быть «да» или «нет». По умолчанию - «нет».

Пример использования:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
  • Чтобы отключить аутентификацию по паролю для текущей попытки подключения ssh, передайте этот параметр в командной строке:

    -o PasswordAuthentication=no
    
  • Чтобы отключить аутентификацию по паролю для всех будущих подключений к любому хосту, добавьте в свой ~/.ssh/config:

    PasswordAuthentication no
    
  • Чтобы отключить его только для некоторых хостов, добавьте в ~ / .ssh / config следующее:

    Host host1 host2 host3...
        PasswordAuthentication no
    

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

Чтобы отключить аутентификацию по паролю на ssh-сервере (т.е. применяется ко всем входящий ssh-соединения), добавьте PasswordAuthentication no к /etc/ssh/sshd_config и перезапустить sshd.

Если вы используете dropbear, просто добавьте "-s"возможность отключить аутентификацию по паролю.

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

PreferredAuthentications=publickey

Вот пример фрагмента сценария sftp bash. Я использую «-o BatchMode = Yes», ​​чтобы отключить запрос пароля в случае сбоя. И проверьте код возврата frp, чтобы убедиться, что ftp-соединение не удалось.

sftp -o "IdentityFile=<YOUR_IDENTTIY_FILE>"  -o "BatchMode=Yes" userName@ftpserver.com <<EOF

cd /$remotepath
mget *.csv $localpath/download

quit
EOF
exit_code=$?
if [[ $exit_code != 0 ]]; then
   echo "sftp error, failed to connect to ftp server" >&2
   exit 1
fi