我想通过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
- 命令),而其他命令需要在服务器上执行。这两种命令混合在一起。
答案 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比仅发出多个命令更好,如果一个依赖于另一个,即在删除文件之前更改目录等。