Прошу помочь
Исходные данные:
- есть локальная линукс машина
- есть много удаленных серверов на которые есть доступ по SSH
- на все удаленные сервера можно ходить только по паролю
- на всех серверах невозможно внести изменения в sudoers так что бы sudo команды выполнять можно было выполнять без пароля
Задача:
- Выполнить на всех удаленных серверах одну и ту же команду с под рута не вводя при этом пароля ни на подключения ни на sudo (что бы каждый сервер не спрашивал пароли)
Наработки:
Ну как всем известно если бы не пароли и судо можно было бы выполнить через «for i in 10.10.48.{101..104}; do ssh " »
Но это нам не подходит.
Есть возможность использовать следующую конструкцию.
########
#!/usr/bin/expect
set password 123456
set first_command sudo\ \su
set root_command uname
set servers 10.10.48.20
spawn ssh $servers
expect «yes/no» {
send «yes\r»
expect «*?assword» { send «$password\r» }
} «*?assword» { send «$password\r» }
expect «$ » { send «$first_command\r» }
expect ": " { send «$password\r» }
expect «# » { send «$root_command\r» }
interact
Но так как в синтаксисе интерпритатора Expect нет for i in .... а как я понял нормально переменой диапазон апишек не присвоишь то соответственно упираемся в тупик.
Как решить задачу ?