Пытаюсь решить такую задачку на 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?

2

Туда,  где "непонятка",  надо написать regex для  "вопросы всегда разные "  ab

3

Macumazan пишет:

надо написать regex для  "вопросы всегда разные "

только нужно ещё не забыть про флаг -re... вообще man expect — оно довольно мощная штука... правда придётся попутно вникнуть в основы tcl'я....

forroboform, как вариант проще и вообще Ъ — передать ssh'у пару опций, чтоб он не задавал этих глупых вопросов...

95% процентов проблем находятся между клавиатурой и стулом.

4

Тут дело немного не в этом!
ls -lia 1> "$my_info" (данные в переменную сохраняются)

В моем случае ответ такой:
http://pix.academ.org/img/2014/08/01/efa605562ed15a342981590d2e72060e.jpg
ssh user@4.1.1.1  1> "$my_info" (Но данные в переменную НЕ сохраняются!)

5

forroboform пишет:

Тут дело немного не в этом!
ls -lia 1> "$my_info" (данные в переменную сохраняются)

В моем случае ответ такой:
http://pix.academ.org/img/2014/08/01/efa605562ed15a342981590d2e72060e.jpg
ssh user@4.1.1.1  1> "$my_info" (Но данные в переменную НЕ сохраняются!)

ssh user@4.1.1.1  2 > &1 > "$my_info" А так?

6

CyberDaemon пишет:

ssh user@4.1.1.1  2 > &1 > "$my_info" А так?


Текст не сохраняется.

7

forroboform пишет:

Запустили SSH с логином и IP и в ответ получаем запрос на согласие добавить "чего то там, куда то там" ...

есть опция которая добавляет ключик или нет, я использую опцию не добавлять

StrictHostKeyChecking=no

т.е. где:
spawn ssh $USER@$HOST
надо делать так:
spawn ssh -o  StrictHostKeyChecking=no $USER@$HOST

А вообще что бы с expect и ssh не мучаться, то используетй утилиту sshpass или ипользуй авторизацию по ключам.

It is good day to die ...
MS Windows 10
Заметки о главном...

8

Благодарю Вас i2ks за дельное предложение относительно -o  StrictHostKeyChecking=no

9

Fat-Zer пишет:

forroboform, как вариант проще и вообще Ъ — передать ssh'у пару опций, чтоб он не задавал этих глупых вопросов...

вообще тебе еще вчера про это сказали.

It is good day to die ...
MS Windows 10
Заметки о главном...

10 (01.08.2014 12:37:03 отредактировано forroboform)

Да Вы правы, вчера об этом писали!
Прошу прощения, видимо от жары мозги плавятся и невнимательность в результате.