Cygwin sshd 间歇性地获取“ssh_exchange_identification:读取:对等方重置连接”或找不到二进制文件

Cygwin sshd 间歇性地获取“ssh_exchange_identification:读取:对等方重置连接”或找不到二进制文件

当我ssh进入 Windows 框时,有时找不到路径上的程序,或者我得到ssh_exchange_identification: read: Connection reset by peer,通常是当同时发生超过 10 个连接时(Windows 框是构建服务器)。如果我强制同时连接超过 15 个,这种情况肯定会发生。无论我从哪里连接,这个问题都会发生

这是我强制多个同时连接时看到的结果:

$ for i in `seq 1 20`; do ssh -x bdedev-pw-530 'which /usr/bin/env'  2>&1 |tee log.$i || echo FAILED& done; wait 2> /dev/null
[1] 21492
[2] 21494
[3] 21496
[4] 21500
[5] 21506
[6] 21514
[7] 21519
[8] 21522
[9] 21525
[10] 21527
[11] 21532
[12] 21535
[13] 21539
[14] 21548
[15] 21552
[16] 21557
[17] 21561
[18] 21565
[19] 21572
[20] 21576
ssh_exchange_identification: read: Connection reset by peer
ssh_exchange_identification: read: Connection reset by peer
ssh_exchange_identification: read: Connection reset by peer
ssh_exchange_identification: read: Connection reset by peer
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env
/usr/bin/env

如您所见,大多数情况下/usr/bin/env都会发现,但有时也会发现。有时,故障与错误有关ssh_exchange_identification: read: Connection reset by peer,但并非在所有情况下都是如此。

有什么建议吗?我可以做些什么来获取更多调试信息以帮助追踪此问题?

我在 Windows Server 2019 主机上运行 cygwin 的 sshd(通过 安装ssh-host-config),运行 cygwin DLL 版本:3.3.4,以及最新的 ssh 包(截至几周前:)OpenSSH_8.8p1, OpenSSL 1.1.1m 14 Dec 2021

该服务器有 28 个物理核心(56 个逻辑核心)和超过 512GB 的 RAM,所以我怀疑这不是内存或 CPU 问题。

我没有为该CYGWIN变量设置 binmode 和 ntsec。

答案1

OpenSSH 服务器有一些配置选项来控制它在同时接收大量客户端连接时执行的操作:

最大创业公司
指定与 SSH 守护程序的最大并发未经身份验证的连接数。额外的连接将被丢弃,直到身份验证成功或连接的 LoginGraceTime 到期。默认值为 10:30:100。

或者,可以通过指定三个冒号分隔的值 start:rate:full(例如“10:30:60”)来启用随机早期丢弃。如果当前有 start(10)个未经身份验证的连接,sshd(8) 将以 rate/100(30%)的概率拒绝连接尝试。如果未经身份验证的连接数达到 full(60),则概率会线性增加,并且所有连接尝试都将被拒绝。

每次源最大启动次数 指定允许从给定源地址进行的未经身份验证的连接数,如果没有限制,则为“无”。此限制与 MaxStartups 相加,以较低者为准。默认值为无。

您几乎同时打开了十几个与服务器的连接。您可能已达到“MaxSessions”限制。如果已接受 10 个或更多尚未完成身份验证的连接,则默认行为将开始丢弃连接。

您可以通过编辑OpenSSH 服务器配置文件,通常名为“sshd_config”,位于远程服务器上。向文件中添加 MaxSessions 的值,或编辑条目(如果已存在),以允许一次超过 10 个连接。sshd编辑配置文件后,请务必重新启动。

另外,您可能会遇到“PerSourceMaxStartups”限制。但该功能默认是禁用的,因此只有将其设置为服务器的 sshd_config 文件中的值时才会生效。

如果您不想重新配置服务器,您可以在 ssh 调用之间添加短暂的延迟,以避免基本上同时有太多调用连接远程服务器:

for i in `seq 1 20`
do
    ssh -x bdedev-pw-530 'which /usr/bin/env'  2>&1 |tee log.$i || echo FAILED&
    sleep 1    ### Sleep a bit between invocations
done
wait 2> /dev/null

相关内容