Проверьте, был ли установлен пароль без доступа - PullRequest
4 голосов
/ 30 сентября 2010

Я бы протестировал через скрипт на python, был ли настроен логин ssh без пароля или нет.Если я запускаю обычную команду ssh, он будет ждать принятия пароля в течение некоторого времени.Есть ли способ, при котором команда ssh должна возвращать ошибку, как только ssh запрашивает пароль.

Возможно ли добиться этого?

Ответы [ 3 ]

8 голосов
/ 30 сентября 2010

Команда ssh принимает довольно большой набор опций, поэтому при условии, что ваш код Python вызывает команды оболочки, выполните следующие действия:

ssh -oNumberOfPasswordPrompts=0 <host> "echo hello"

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

1 голос
/ 30 сентября 2010

paramiko вызовет AuthenticationException, если вы не передадите пароль методу SSHClient s .connect() и рабочий ключ не найден.

0 голосов
/ 27 марта 2019

Можно установить параметр для команды ssh, чтобы использовать только открытый ключ в процессе аутентификации, и установить пакетный режим с командой, которая всегда возвращает значение true, когда команда выполняется на удаленном хосте.При таком подходе вы можете записать код выхода в переменную $?и принять какое-то решение.

ssh -o PreferredAuthentications=publickey -o BatchMode=yes <host> /bin/true &> /dev/null
if [ $? -eq 0 ]; then
    #DO SOMETHING, THE CONNECTION WAS SUCCESSFUL
else
    #CONECTION DENIED
fi

Вы можете записать пользовательский вывод в переменную, найдя «Отказано в доступе» в подробном выводе команды ssh, как в следующем коде.

PERMISION=$([ ! -z "$(ssh -v -o PreferredAuthentications=publickey -o BatchMode=yes <host> /bin/true 2>&1 | grep " Permission denied")" ] && echo "GRANTED" || echo "DENIED")
if [ $PERMISION == "GRANTED" ]; then
    #DO SOMETHING, THE CONNECTION WAS SUCCESSFUL
else
    #CONECTION DENIED
fi

Я надеюсьэто поможет вам.

...