Скрипт bash, который может sh на удаленную машину и выполнять команды, выдает ошибку, если пароль неверен - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь bash скрипт, где я беру аргумент файла, который имеет IP-адрес. Я использую sshpass, но с этим я не могу знать, был ли s sh вход успешным или нет. Есть ли способ проверить это? Пожалуйста, предложите, если не sshpass, мне нужно использовать какой-либо другой cmd, чтобы выполнить удаленный вход и выполнить cmds?

Вот фрагмент кода:

#!/bin/bash

filename="$1"
while read -r line; do
  sshpass -p 'test' ssh -o StrictHostKeyChecking=no test@$line 'df -h'
done < "$filename"

Пробовали предлагаемый способ проверки $? значение (если его неверный пароль, $? значение будет 5, однако с действительным или недействительным паролем, сценарий оболочки не отображает «неправильный пароль», он всегда повторяет «Можно ли sh в поле - Пароль правильный» в соответствии с следующий код:

#!/bin/bash

filename="$1"
while read -r line; do
  sshpass -p 'test' ssh -o StrictHostKeyChecking=no test@$line 'df -h'
  if [ $? -eq 5]
  then
     echo "Wrong password"
  else
    echo "Can ssh to box- Password is correct"
  fi
done < "$filename"

Мое требование - s sh для удаленного блока и выполнять команды. А в случае сбоя s sh, т. е. пароль недействителен, необходимо напечатать, что пароль недействителен .

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Использовать возвращаемое значение из sshpass.

Согласно man sshpass:

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ

Как и в любой другой программе, sshpass возвращает 0 при успех. В случае сбоя используются следующие коды возврата: 5 Неверный / неверный пароль

После выполнения sshpass, в bash возвращаемое значение команды сохраняется в переменной $?.

Доказательство:

devilan@localhost:~ $ sshpass -p 'test' ssh smurf@localhost
devilan@localhost:~ $ echo $?
5

Рекомендуемое использование:

sshpass -p 'test' ssh smurf@localhost
if [ $? -eq 5 ]
then
    echo "Wrong password"
else
    echo "Something else"
fi
0 голосов
/ 23 апреля 2020

Пробел отсутствовал после 5, и, следовательно, если условие не было успешно оценено. Вот модифицированный код, который работает:


filename="$1"
while read -r line; do
  sshpass -p 'test' ssh -o StrictHostKeyChecking=no test@$line 'df -h'
  if [ $? -eq 5 ]
  then
     echo "Wrong password"
  else
    echo "Can ssh to box- Password is correct"
  fi
done < "$filename"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...