Bash 脚本:并行 ssh 缺少输出

Bash 脚本:并行 ssh 缺少输出

我运行以下代码片段:

#!/bin/bash
for i in $(seq 1 30); do
{
        # output missing
        #ssh root@MYHOST "echo hi"

        # works
        #bash -l -c "echo hi"
        #echo hi
}&
done | wc -l

如果我并行运行 ssh(30 次)并计算返回的行数,我会收到一个随机数量,始终小于 30。如果我并行运行echo hi(或在其自己的 shell 内运行),我会收到全部 30 行。

这里出了什么问题?

PS:我知道还有其他用于并行化的工具,如parallel或pssh,但我试图理解这里描述的问题。

答案1

谢谢 Doug Smythies,您提供了解决方案,也谢谢你,pLumo,您发布了关键的错误消息。

我实际上达到了MaxStartups 10:30:6010 的“开始丢弃之前未经身份验证的连接数”(引用:https://stackoverflow.com/questions/4812134/in-sshd-configuration-what-does-maxstartups-103060-mean

达到该限制时收到的错误消息(我将其扔掉了..)是 ssh_exchange_identification: Connection closed by remote host

将限制增加到 30 并重新启动 sshd 可解决该问题。

增加到MaxSessions30 没有任何影响。MaxSessions增加时不会产生负面影响,使用 的默认设置也不会产生正面影响MaxSessions

再次感谢!解决这个问题让我明白,当我使用并行化时,我并没有做任何根本性的错误。现在我可以专注于我真正想要并行化的任务了 :)

相关内容