在Bash中ssh和运行多个命令最干净的方法是什么?

我已经建立了一个ssh代理,并且我可以在Bash脚本的外部服务器上运行命令,执行如下操作:

ssh blah_server "ls; pwd;"

现在,我真正想做的是在外部服务器上运行很多长命令。 将所有这些用引号括起来都是相当难看的,为避免这种情况,我宁愿多次避免ssh'ing。

那么,我有办法一次性完成这个任务吗? 我正在寻找的东西沿线:

ssh blah_server (
   ls some_folder;
   ./someaction.sh;
   pwd;
)

基本上,只要干净,我都会很满意。

编辑

为了澄清,我正在谈论这是一个更大的bash脚本的一部分。 其他人可能需要处理脚本,所以我想保持清洁。 我不想让一行看起来像这样的bash脚本:

ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"

因为它非常丑陋难读。


如何在这里打击文件:

ssh otherhost << EOF
  ls some_folder; 
  ./someaction.sh 'some params'
  pwd
  ./some_other_action 'other params'
EOF

为了避免评论中@Globalz提到的问题,你可以(取决于你在远程站点上做什么)用第一行代替

ssh otherhost /bin/bash << EOF

请注意,您可以在Here文档中进行变量替换,但是您可能需要处理引用问题。 例如,如果引用“限制字符串”(即上面的EOF ),则不能执行变量替换。 但是,如果不引用限制字符串,则会替换变量。 例如,如果您在shell脚本中定义$NAME上面的$NAME ,那么您可以这样做

ssh otherhost /bin/bash << EOF
touch "/tmp/${NAME}"
EOF

它会在目标otherhost上创建一个文件,其名称为您分配给$NAME的任何$NAME 。 有关shell脚本引用的其他规则也适用,但这些规则太复杂了。


在本地编辑脚本,然后将其管理到ssh中,例如

cat commands-to-execute-remotely.sh | ssh blah_server

其中commands-to-execute-remotely.sh与上面的列表类似:

ls some_folder
./someaction.sh
pwd;

我看到两种方式:

首先你做一个这样的控制插座:

 ssh -oControlMaster=yes -oControlPath=~/.ssh/ssh-%r-%h-%p <yourip>

并运行你的命令

 ssh -oControlMaster=no -oControlPath=~/.ssh/ssh-%r-%h-%p <yourip> -t <yourcommand>

这样你就可以编写一个ssh命令而不需要重新连接服务器。

第二是动态生成脚本, scp荷兰国际集团,并运行。

链接地址: http://www.djcxy.com/p/97149.html

上一篇: What is the cleanest way to ssh and run multiple commands in Bash?

下一篇: Need to execute a shell script in different unix servers