好了,我有一个外壳脚本,可以通过ssh使用rsync将一些文件传输到远程主机。
但是,除了传输之外,我还需要在传输之前和之后做一些内务处理,这涉及到使用命令执行额外的ssh,以及调用scp来传输rsync传输中未包含的一些额外数据(我在传输发生时生成这些数据)。
可以想象,这会导致大量ssh会话启动和停止,特别是因为内务操作实际上(通常)非常快。我已经在主机上验证了,这表现为大量的SSH连接和断开,虽然与实际传输相比很小,但似乎相当浪费。
所以我想知道的是,有没有一种方法可以只打开一个ssh连接,然后让它保持连接,直到我用完它?也就是说,我最初的ssh内务操作会让它的连接保持打开,这样当rsync (以及后来的scp)运行时,它就可以使用之前打开的连接来完成它的事情。
这样的事情在shell脚本中是可能的吗?如果是这样,任何关于如何处理错误(即,确保连接在不需要时关闭)的指示也将不胜感激!
发布于 2013-07-04 19:02:04
这是可能的。最简单的方法甚至不需要任何编程。参见https://unix.stackexchange.com/questions/48632/cant-share-an-ssh-connection-with-rsync -一般的想法是使用SSH连接重用来让您的多个SSH共享一个会话,然后让rsync也加入。
最难的方法是使用libssh2并自己编写所有程序。这将是更多的工作,在您的情况下似乎没有什么值得推荐的。对于更复杂的场景,它很有用。
https://stackoverflow.com/questions/17468474
复制相似问题