Удаленное выполнение команд SSH в скрипте

Удаленное выполнение команд SSH в скрипте

В моем сценарии я делаю что-то вроде этого:

command="some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;"
ssh_command="ssh root@$ip '$command'"

echo $ssh_command
exec $ssh_command

Команда echo выдает следующий вывод:

ssh [email protected] 'some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;'

После «exec» я получаю вывод:

bash: some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;: No such file or directory

Однако, когда копируешь команду из вывода echo и запускаешь ее прямо из терминала, все работает как часы. Есть идеи, почему?

решение1

execзаменяет оболочку программой, вызывая ее с предоставленными аргументами. Оболочка видит 2 токена: "exec" и "some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;". Второй аргумент интерпретируется как путь к программе для выполнения, включая все пробелы и точки с запятой. Только оболочка знает, что аргументы нужно разделять пробелами, а команды — точкой с запятой. Поэтому следует заменить на execвызов оболочки, например sh -c "$ssh_command".

решение2

Нохупможет быть вам полезно.

Попробуйте интегрировать что-то вроде этого по ссылке ниже.

ssh -n -f пользователь@хост "ш -с'cd /whereever; nohup ./whatever > /dev/null 2>&1 &'"

https://stackoverflow.com/q/29142/1666510

Связанный контент