我运行以下代码片段:
#!/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:60
10 的“开始丢弃之前未经身份验证的连接数”(引用:https://stackoverflow.com/questions/4812134/in-sshd-configuration-what-does-maxstartups-103060-mean)
达到该限制时收到的错误消息(我将其扔掉了..)是
ssh_exchange_identification: Connection closed by remote host
。
将限制增加到 30 并重新启动 sshd 可解决该问题。
增加到MaxSessions
30 没有任何影响。MaxSessions
增加时不会产生负面影响,使用 的默认设置也不会产生正面影响MaxSessions
。
再次感谢!解决这个问题让我明白,当我使用并行化时,我并没有做任何根本性的错误。现在我可以专注于我真正想要并行化的任务了 :)