Удаленные команды SSH с циклом for - PullRequest
1 голос
/ 04 июля 2019

Я запускаю команды ssh с клиентского компьютера на удаленном компьютере:

ssh  -o "StrictHostKeyChecking no" -i $key 'user'@$public_ip "    
i=1;
workerips: "ip1 ip2";
for ip in $worker_ips; do
    echo \"ipis: ${ip} and i is ${i}\"
done;"

Моя проблема в том, что $ ip и $ i внутри цикла for пустые. $ i сохраняет значение вне цикла for. Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 04 июля 2019

Это лот проще делать такие вещи с помощью heredoc:

$ ssh -o "StrictHostKeyChecking no" -i "$key" user@$public_ip << \EOF
> i=1
> workerips="ip1 ip2"
> for ip in $workerips; do echo "ipis: ${ip} and i is ${i}"
> done
> EOF
1 голос
/ 04 июля 2019

В зависимости от того, что вы пытаетесь сделать, параллельная программа ssh (pssh) может работать для вас.

https://linux.die.net/man/1/pssh

Идея состоит в том, что вы можете выполнить одну и ту же команду для всех узлов, которые вы определили (либо через доску, либо в пакетном режиме). Базовыми рабочими нагрузками может быть обновление файла конфигурации на нескольких узлах, более сложные случаи включают такие вещи, как моментальные снимки в кластере Cassandra, чтобы убедиться, что они выполняются практически одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...