我运行以下代码片段:
#!/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,但我尝试理解这里描述的问题。
谢谢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
.再次感谢你!解决这个问题表明我在使用并行化时没有做任何根本性的错误。现在我可以专注于我真正想要并行化的任务 :)