如何通过SSH发送shell命令而不必每次都打开新连接?

时间:2015-11-13 00:00:23

标签: shell ssh blacklist

我想通过SSH向服务器发送几个shell命令。目前看起来如下:

echo "copy file on server"
ssh user@server "cp file1 file2"

echo "rename file on server"
ssh user@server "mv file2 file3"

echo "generate folder on server"
ssh user@server "mkdir files"

echo "syncing files to server"
rsync ...

echo "do some other stuff"
ssh user@server "touch filex"

在这样做了几次之后,我被列入黑名单,因为我有太多打开的连接/打开了太多连接。

有没有办法避免被列入黑名单(例如打开一个SSH句柄,发送命令,再次关闭句柄)?

问题是,某些命令需要在本地执行(例如rsync - 命令),而其他命令需要在服务器上执行。这两种命令混合在一起。

3 个答案:

答案 0 :(得分:1)

如果这是您事先知道的一系列命令,一个非常简单的解决方案是使用顺序"&&"操作

答案 1 :(得分:1)

我喜欢这样做:

cat <<eot | ssh user@host bash
cp /tmp/a /tmp/b
mv /tmp/b /tmp/c
#etc
eot

答案 2 :(得分:1)

您可以执行以下操作之一:

scp run.sh targethost:/ tmp /。 ssh targethost /tmp/run.sh

ssh targethost'cmd1; CMD2; CMD3'

ssh targethost'cmd1&amp;&amp; cmd2&amp;&amp; CMD3'

如果是复杂的操作,我有时会建议复制脚本。此外,使用逻辑AND比仅发出多个命令更好,如果一个依赖于另一个,即在删除文件之前更改目录等。