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