Назад | Перейти на главную страницу

Как выполнить ssh из сценария оболочки и выполнить цикл с использованием глобальных параметров?

Я пытаюсь достичь примерно этого.

Servers = (11, 12, 13)

ssh -t admin@10.1.1.10 << EOF
    sudo tar -zcf somefolders.tar.gz ~/somefolders
    for i in "${Servers[@]}"
        sudo scp somefolders.tar.gz admin@10.1.1.$i:~
EOF

Теперь проблема с for цикл, потому что он выполняется на удаленном хосте без Servers параметры, и поскольку это была отдельная команда, как и должно быть. Я знаю, почему он это делает, но не знаю, как это сделать правильно? Как я могу правильно выполнить этот цикл?

Я знаю, что одно решение - написать операцию несколько раз с разными IP-адресами, но мы знаем, что это неэффективный способ написания кода.

Заранее спасибо.

Для этого не обязательно использовать массивы bash, просто используйте список серверов, разделенных пробелами:

В $Server переменная будет локально интерпретироваться вашей оболочкой, и сценарий, переданный в 10.1.1.10, будет отправлен с "for i in 11 12 13 ;..."по своему содержанию.

Servers="11 12 13"

ssh -t admin@10.1.1.10 << EOF
    sudo tar -zcf somefolders.tar.gz ~/somefolders
    for i in $Servers ;do
        sudo scp somefolders.tar.gz admin@10.1.1.\$i:~
    done
EOF