我开发了一个bash脚本,给定一个文件路径列表,运行一个循环,其中:
- 它通过ssh访问桥接机,并从这里使用rsync从另一台机器获取文件到临时目录。
- 从我的本地机器,它获得之前在桥机上复制的文件。
它在一个循环中执行这两个操作,每次循环获取一个不同的文件,重复循环获取10个不同的文件。
有时会弹出以下错误。它的原因是什么呢?
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(228) [Receiver=3.2.3]
kex_exchange_identification: read: Connection reset by peer
Connection reset by <ip address> port 22
我已经尝试暂时从列表中排除一些文件(例如,排除列表的前半部分,然后排除列表的后半部分),我看到错误不再显示。
这让我认为是服务器停止了我的脚本,因为它检测到脚本正在执行太多操作/太快(这将解释消息Connection reset by <ip address> port 22
)。
所以我试着在循环中放入一些睡眠命令,但错误仍然出现。
我能做什么?
正如这个线程和这个SO线程所指出的,这似乎确实是机器-ssh -target-of- firewall的问题。
我通过在ssh命令之间放置sleep
命令并增加睡眠时间直到错误不再出现(在我的情况下为15秒)来解决它。
所以我的猜测是,当远程机器通过ssh运行的命令超过某种阈值时,远程机器的防火墙会停止执行这些命令,例如"每次命令数"、"命令专用内存"或类似的阈值。