Пытаюсь решить такую задачку на BASH.
1.Имеем файл base.txt вида:
admin1@10.10.10.1:pass1
admin2@10.10.10.2:pass2
admin3@10.10.10.3:pass3
2.Запускаем "SH-скрипт", который:
- считывает данные из файла base.txt в массив
т.е. получаем нечто такое:
$servers = array("admin1@10.10.10.1:pass1", "admin2@10.10.10.2:pass2", "admin3@10.10.10.3:pass3");
Далее:
- считаем количество ключей -1, для дальнейшего перебора в цикле по ключу
- запускаем цикл
- обращаемся к $key=0 => $servers[$key], вытаскиваем значение, которое затем "режем на переменные"
$user = "admin1";
$serv = "10.10.10.1";
$pass = "pass1";
Дальше примерно так:
#!/usr/bin/expect -f
set timeout 2
set USER "$user"
set HOST "$serv"
set PASS "$pass1"
spawn ssh $USER@$HOST
expect (тут непонятка!!!)
send "yes\r"
Суть непонятки: пытаемся подключиться с моей Linux машины по списку серверов к серверу №1
Запустили SSH с логином и IP и в ответ получаем запрос на согласие добавить "чего то там, куда то там" ...
Такие запросы будут всегда разными (собственно автоматизация для этого и нужна).
Но ответ всегда будет YES.
После ответа YES => последует ввод пароля send "$PASS\r" и затем еще 10 команд и так до конца цикла.
Нужно "получить вопрос" в виде подтверждения на добавление ключа и сравнить его с "шаблоном"
Но с этим как раз засада (вопросы всегда разные ...).
Далее забить ответ с помощью send "yes\r"
Как это можно решить c expect + bash?
SSH соединение с помощью expect
Туда, где "непонятка", надо написать regex для "вопросы всегда разные " :)
надо написать regex для "вопросы всегда разные "
только нужно ещё не забыть про флаг -re... вообще man expect — оно довольно мощная штука... правда придётся попутно вникнуть в основы tcl'я....
forroboform, как вариант проще и вообще Ъ — передать ssh'у пару опций, чтоб он не задавал этих глупых вопросов...
Тут дело немного не в этом!
ls -lia 1> "$my_info" (данные в переменную сохраняются)
В моем случае ответ такой:

ssh user@4.1.1.1 1> "$my_info" (Но данные в переменную НЕ сохраняются!)
Тут дело немного не в этом!
ls -lia 1> "$my_info" (данные в переменную сохраняются)
В моем случае ответ такой:
ssh user@4.1.1.1 1> "$my_info" (Но данные в переменную НЕ сохраняются!)
ssh user@4.1.1.1 2 > &1 > "$my_info" А так?
ssh user@4.1.1.1 2 > &1 > "$my_info" А так?
Текст не сохраняется.
Запустили SSH с логином и IP и в ответ получаем запрос на согласие добавить "чего то там, куда то там" ...
есть опция которая добавляет ключик или нет, я использую опцию не добавлять
StrictHostKeyChecking=no
т.е. где:
spawn ssh $USER@$HOST
надо делать так:
spawn ssh -o StrictHostKeyChecking=no $USER@$HOST
А вообще что бы с expect и ssh не мучаться, то используетй утилиту sshpass или ипользуй авторизацию по ключам.
Благодарю Вас i2ks за дельное предложение относительно -o StrictHostKeyChecking=no
forroboform, как вариант проще и вообще Ъ — передать ssh'у пару опций, чтоб он не задавал этих глупых вопросов...
вообще тебе еще вчера про это сказали.
Да Вы правы, вчера об этом писали!
Прошу прощения, видимо от жары мозги плавятся и невнимательность в результате.