我有一个bash脚本,它可以SSH进入2台计算机并运行相同的命令。
我想将其存储在var中,但是我不确定在运行命令时如何引用var的内容
ssh -o StrictHostKeyChecking=no ubuntu@123.123.123 -i ./travis/id_rsa <<-END
sudo su;
...
echo "Done!";
END
ssh -o StrictHostKeyChecking=no ubuntu@456.456.456 -i ./travis/id_rsa <<-END
sudo su;
...
echo "Done!";
END
我尝试了类似的方法,但是没有用:
script=$(cat <<-END
sudo su;
...
echo "Done!";
END
)
ssh -o StrictHostKeyChecking=no ubuntu@123.123.123 -i ./travis/id_rsa $script
ssh -o StrictHostKeyChecking=no ubuntu@456.456.456 -i ./travis/id_rsa $script
答案 0 :(得分:2)
如果我完全能够理解您的要求,那么您真的 不想将命令放在变量中。
for host in 123.123.123 456.456.456; do
ssh -o StrictHostKeyChecking=no ubuntu@"$host" -i ./travis/id_rsa<<-\____here
sudo -s <<-_________there
: your script goes here
________there
echo "Done."
____here
done
如果您真的想分配多行变量(但是请相信我,您不愿意),其语法很简单
script='sudo -s <<\____there
: your commands
____there
echo "Done."'
但是实际上并不需要这样做,并且实际上会使事情复杂化。您会看到,将正确引用的字符串作为参数传递给ssh
是非常棘手的-您具有本地外壳程序和远程外壳程序,并且都需要附加的引号或转义符才能正确地通过外壳程序元字符;并且通常带有eval
的警告,只有通过传递可执行代码作为远程外壳程序的字符串,才能有效地运行隐藏的eval
。
答案 1 :(得分:0)
我相信您想做这样的事情:
cmds="sudo bash -c 'command1; command2; command3;'"
ssh ... "$cmds"