当我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
错误相关,但并非在所有情况下都如此。
有什么建议么?我能做些什么来获得更多调试信息来帮助追踪这个问题?
我在ssh-host-config
Windows Server 2019 主机上运行 cygwin 的 sshd(通过 安装),运行 cygwin DLL 版本:3.3.4,以及最新的 ssh 包(截至几周前:)OpenSSH_8.8p1, OpenSSL 1.1.1m 14 Dec 2021
。
服务器有 28 个物理内核(56 个逻辑内核)和超过 512GB 的内存,所以我怀疑这不是内存或 CPU 问题。
我没有为CYGWIN
变量设置 binmode 和 ntsec 。
OpenSSH 服务器有一些配置选项来控制它在同时接收到大量客户端连接时的行为:
您或多或少同时打开十几个与服务器的连接。您可能会遇到“MaxSessions”限制。如果它接受了 10 个或更多尚未完成身份验证的连接,默认行为将开始丢弃连接。
您可以通过编辑远程服务器上的OpenSSH 服务器配置文件(通常名为“sshd_config”)来更改此限制。将 MaxSessions 的值添加到文件中,或编辑条目(如果已存在)以允许一次超过 10 个连接。请务必
sshd
在编辑配置文件后重新启动。或者,您可能会遇到“PerSourceMaxStartups”限制。但是该功能默认情况下是禁用的,因此只有在服务器的 sshd_config 文件中将其设置为某个值时它才会生效。
如果您不想重新配置服务器,您可以在 ssh 调用之间添加一个短暂的延迟,以避免有太多同时连接远程服务器: