本指南介绍如何使用 MaxStartups 和 MaxSessions 参数来限制与 OpenSSH 服务器服务的客户端连接。 这些设置可帮助你排查连接问题并管理未经身份验证和经过身份验证的 SSH 会话,尤其是在高负载环境中。
症状
可以使用 MaxStartups 和 MaxSessions 解决以下类型的症状。
-
症状 1:客户端无法连接到 OpenSSH 服务器服务并建立会话。 此外,可能会收到以下错误消息:
- 连接被远程主机重置
- 已超过 MaxStartups
- 协商失败
-
症状 2:在支持会话复用(每个连接多个会话)的环境中,客户端连接并进行身份验证。 但是,服务器会删除连接。
原因
症状 1 表示客户端应用程序同时连接到 OpenSSH 服务器服务过多。
症状 2 仅发生在多路复用环境中。 它表示 OpenSSH 服务器服务不支持客户端正在使用的每个连接的会话数。 配置后MaxStartups可能会出现此症状。
如何使用参数
MaxStartups并且 MaxSessions 是sshd_config文件中的参数。 以下各节介绍了它们的运行方式。
MaxStartups
该 MaxStartups 参数定义 OpenSSH 服务器服务可以管理的并发未经身份验证的连接数。 此设置在支持多个并行 SSH 连接的服务器上特别有用,包括跳转主机和预配服务器(例如使用 Ansible 的服务器)。 它还适用于高负载环境或在暴力攻击期间。
该值是一组由冒号分隔的三个整数,采用格式 Start:Rate:Full。 整数表示以下值:
- 开始:OpenSSH 服务器服务在开始删除连接之前支持的未经身份验证的连接数。
- 速率:OpenSSH 服务器服务删除连接的概率。 只要并发会话数低于
Start值,服务将Rate忽略。 但是,当并发连接数超过Start时,每个附加连接都有Rate下降的百分比概率。 - 完整:当并发连接数超过
Full时,服务将删除所有其他连接。
例如,请考虑一个使用配置 MaxStartups 20:40:60 的系统。 OpenSSH 服务器服务管理连接,如下所示:
- 该服务维护前 20 个并发未经身份验证的连接。
- 从第 21 次连接尝试开始,服务器删除新连接尝试的可能性为 40%。
- 服务达到 60 个并发未经身份验证的连接后,服务器将拒绝所有进一步的连接尝试。
MaxSessions
该 MaxSessions 参数定义了 OpenSSH Server 服务对于每个网络连接允许的打开的 shell、登录或子系统(例如 sftp)会话的数量。 将MaxSessions设置为1可以有效地禁用会话复用。 将其设置为 0 阻止所有 shell、登录和子系统会话,但允许端口转发。 默认值为 10。
如何设置连接参数
若要修改 Windows OpenSSH Server 服务的参数,请修改sshd_config文件,然后重启 OpenSSH 服务器服务。 为此,请执行以下步骤:
-
使用管理员级帐户打开文本编辑器,然后打开 %ProgramData%\ssh\sshd_config。 这些设置的默认文本应类似于以下摘录:
#MaxStartups 10#MaxSessions 10注释
MaxSessions通常出现在文件的# Authentication节。MaxStartups通常在文件后面的常规选项列表中显示。 -
若要启用
MaxStartup或MaxSessions设置值,请编辑文本,使其类似于以下摘录:MaxStartups 20:40:60MaxSessions 15注释
在此命令中,
20:40:60和15是示例值。 使用适合你的环境的值。 -
保存并关闭sshd_config文件。
-
若要验证配置,请打开 Windows PowerShell 命令提示符窗口,然后运行以下命令:
sshd -t -
若要重启 OpenSSH 服务器服务,请打开 Windows 命令提示符窗口,然后运行以下命令:
NET STOP "OpenSSH SSH Server" && NET START "OpenSSH SSH Server"
服务重启后,它使用新的参数值。
详细信息
- “适用于 Windows Server 和 Windows 的 OpenSSH Server 配置”中的sshd_config Windows 配置
- sshd_config(5) - Linux 手动页
- sshd_config - OpenSSH 守护程序配置文件
第三方信息免责声明
本文讨论的第三方产品由独立于微软的公司制造。 Microsoft对这些产品的性能或可靠性不作任何明示或暗示的保证。