Протестируйте соединение SSH как корень

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

for i in $(cat servers.list); do 
if [ "ssh root@$i" ] 
then  
echo "can connect as root in server $i" 
else 
echo "can't connect as root in server $i" 
fi 
done

Но это всегда говорит, что я могу соединиться, даже если это не похоже на это.

Я был бы очень признателен за некоторую справку.

1
задан 31 October 2019 в 18:52

1 ответ

[ "ssh root@$i" ] тесты, непуста ли строка ssh root@$i - поэтому, конечно, это всегда верно.

, По-видимому, то, что Вы хотите сделать, бесшумно выполняют команду ssh root@$i и тестируют статус выхода :

if ssh -q root@$i; then

Однако, если это успешно выполняется, это (по умолчанию) откроет оболочку входа в систему на $i - Ваш цикл не продолжится, пока Вы не вышли от такой оболочки. Возможно, было бы лучше выполнить определенную команду на удаленном хосте:

if ssh -q root@$i /bin/true; then

Наконец, цикличное выполнение по результату cat является дурной привычкой войти: лучше использовать while цикл:

while IFS= read -r i; do 
  if ssh -q root@"$i" /bin/true
  then  
    echo "can connect as root in server $i" 
  else 
    echo "can't connect as root in server $i" 
  fi 
done < servers.list

Вы могли бы также хотеть смотреть на parallel-ssh от pssh пакета.

3
ответ дан 3 December 2019 в 07:19

Другие вопросы по тегам:

Похожие вопросы: