Linux 如何使用大量命令在bash脚本中执行ssh?

Linux 如何使用大量命令在bash脚本中执行ssh?,linux,bash,ssh,Linux,Bash,Ssh,我试图在bash脚本中运行以下命令,但直到调用./install.sh rereplica为止。其余的命令根本不被调用 ssh $node2user@$node2 "cd /tmp; tar -xf $mmCS.tar; cd $mmCS; ./install.sh csreplica; ./install.sh keepalived $vip low;./install.sh haproxy $node1:8080 $node2:8080 $vip:8080; ./install.sh c

我试图在bash脚本中运行以下命令,但直到调用./install.sh rereplica为止。其余的命令根本不被调用

  ssh $node2user@$node2 "cd /tmp; tar -xf $mmCS.tar; cd $mmCS; ./install.sh csreplica; ./install.sh keepalived $vip low;./install.sh haproxy $node1:8080 $node2:8080 $vip:8080; ./install.sh confmongo $dbPath"

如果我必须使用SSH执行复杂的脚本,我通常在本地编写脚本,使用SSH在目标机器上复制脚本,然后在那里执行:

scp foo.sh $node2user@$node2:
ssh $node2user@$node2 "bash ./foo.sh"
这样,我可以通过使用
bash-x
调用脚本来调试脚本,并且可以充分利用bash的强大功能

或者,您可以使用

ssh $node2user@$node2 "set +x; cd /tmp; ..."

您可以在标准输入上提供
ssh
脚本:

ssh $node2user@$node2 < my_script.sh
ssh$node2user@$node2
很有意思,因为
rereplica
不在您给我们的示例中。这是执行某些配置的脚本的参数。这已成功执行。我检查过了。你的
安装了吗。sh
在最后执行
退出操作吗?不,它不执行退出操作。尝试添加
设置-x在开头。这将使远程shell在执行命令时打印命令。这可能会给你一个暗示。我也在做同样的事情。我已经对远程计算机执行了install.sh的scp,并使用不同的参数运行了脚本。只有在./install.sh$vip low(或者,在你的例子中,./foo.sh)之前的这个“bash”,我不会给出。我应该把这个放进去吗?这是做什么的?在*nix系统上有不同类型的shell,它指定脚本应该用
bash
@prashantas执行:你做的不是同一件事。执行用
分隔的命令列表与将它们放入脚本文件并执行不同:引号解析不会有任何意外,您可以轻松地在命令之间放置调试输出,您可以更好地查看代码,…实际上set-x帮助了我。我在做pkill-f mongo和pkill-f tomcat。那是在做一些不想要的事情。