sshd_config
配置 OpenSSH 服务器:监听、身份验证、转发、访问控制和日志记录。
执行前须知
服务器配置与客户端 ssh_config 不同。路径、支持的选项和默认值取决于操作系统和 OpenSSH 版本。保持现有的管理会话处于打开状态并且恢复路径可用。在应用更改之前,使用 sshd -t 验证实际配置并使用 sshd -T 检查有效设置;这些命令可能需要管理员权限。在关闭原始会话之前验证第二次登录。不要盲目复制示例值。
修改生效后,请先通过新的 SSH 会话确认可以正常登录,并验证预期功能。在确认成功之前,请保持当前会话打开,以便必要时恢复配置。
使用示例
服务器配置示例。根据您的环境调整身份验证、路径和访问规则。
Port 22
PermitRootLogin no
PubkeyAuthentication yes
AllowTcpForwarding yes在应用更改之前验证语法并检查有效的服务器设置。
sudo sshd -t
sudo sshd -T参数与示例
Port常用监听TCP端口;允许多个端口指令。确保防火墙和客户端允许所选端口。
Port 2222ListenAddress常用sshd 监听的本地地址。地址可以包含端口;确保它存在于服务器上。
ListenAddress 192.0.2.10AddressFamily选择地址系列:any、inet(适用于 IPv4)或 inet6(适用于 IPv6)。
AddressFamily inetHostKey常用服务器私有主机密钥的路径;这不是用户的身份验证密钥。保护私人文件。
HostKey /etc/ssh/ssh_host_ed25519_keyHostCertificate与配置的主机密钥匹配的服务器主机证书的路径。
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pubPasswordAuthentication常用允许或禁止密码认证。禁用密码认证前,请先验证其他登录方式可用。
PasswordAuthentication noPubkeyAuthentication常用允许或拒绝公钥身份验证。服务器权限和授权密钥仍然适用。
PubkeyAuthentication yesKbdInteractiveAuthentication常用允许键盘交互式身份验证。提示和可用方法取决于服务器和身份验证后端。
KbdInteractiveAuthentication yesAuthenticationMethods常用需要空格分隔的方法列表之一;列表中的每个以逗号分隔的方法都必须成功。还必须启用每种方法。
AuthenticationMethods publickey,keyboard-interactivePermitRootLogin常用控制 root 登录:yes、prohibit-password、forced-commands-only 或 no。修改前请先测试其他管理员登录方式。
PermitRootLogin noPermitEmptyPasswords允许具有空密码的帐户使用密码身份验证进行身份验证。启用此功能是不安全的。
PermitEmptyPasswords noAuthorizedKeysFile常用包含授权公钥的文件的路径。相对路径是从用户的主目录解析的;支持令牌。
AuthorizedKeysFile .ssh/authorized_keysStrictModes常用在接受登录之前检查用户文件和主目录的所有权和权限。
StrictModes yesAllowUsers常用仅允许列出的用户名模式; USER@HOST 模式可以限制来源。帐户访问还受到其他限制。
AllowUsers alice bobDenyUsers拒绝匹配的用户名模式。拒绝规则优先于相应的允许规则。
DenyUsers guestAllowGroups仅允许匹配命名组中的用户,并遵守其他访问规则。
AllowGroups sshusersDenyGroups拒绝匹配命名组中的用户;使用组名称,而不是数字 ID。
DenyGroups restrictedAllowTcpForwarding常用控制 TCP 转发:yes 或 all、no、local 或 remote。仅靠此设置无法阻止具有不受限制的 shell 权限的用户自行转发。
AllowTcpForwarding localDisableForwarding禁用转发功能,覆盖其他转发设置。这可能会破坏隧道和代理或 X11 转发。
DisableForwarding yesGatewayPorts常用控制远程转发绑定地址:no 绑定环回,yes 绑定通配符,clientspecified 允许客户端选择的地址。暴露端口会带来安全隐患。
GatewayPorts noPermitOpen限制本地 TCP 转发的目标;可指定 host:port、any 或 none。匹配时不会解析主机名。
PermitOpen db.example.com:5432PermitListen限制远程转发的监听地址和端口; GatewayPorts 也会影响绑定。
PermitListen localhost:18080AllowAgentForwarding允许 SSH 身份验证代理转发。有权访问代理套接字的远程进程可以请求签名。
AllowAgentForwarding noAllowStreamLocalForwarding控制 Unix 域套接字转发:yes 或 all、no、local 或 remote。
AllowStreamLocalForwarding noX11Forwarding启用 X11 显示转发。仅在需要时启用并了解远程显示访问风险。
X11Forwarding noMaxAuthTries常用断开连接之前每个连接的最大身份验证尝试次数。服务器可能会更早地记录故障。
MaxAuthTries 4MaxSessions常用每个 SSH 连接的最大 shell、登录或子系统会话数。设置为零会阻止会话,但仍可能允许转发。
MaxSessions 10MaxStartups常用限制未经身份验证的连接。 start:rate:full 形式逐渐拒绝负载下的连接。
MaxStartups 10:30:100LoginGraceTime常用允许认证的时间;持续时间为零意味着没有时间限制。
LoginGraceTime 60sClientAliveInterval常用加密 SSH 级客户端活动探测的时间间隔(以秒为单位);零禁用这些探测器。
ClientAliveInterval 30ClientAliveCountMax常用断开连接之前容忍的未应答的 SSH 级客户端活动探测的数量。与 ClientAliveInterval 一起使用。
ClientAliveCountMax 3TCPKeepAlive控制 TCP keepalive 消息。这些与加密的 SSH 客户端活动探测是分开的。
TCPKeepAlive yesUsePAM常用在支持 PAM 的构建上启用 PAM 集成。 PAM 策略和可用的身份验证方法因系统而异。
UsePAM yesPermitTTY允许分配伪终端。禁用它会影响交互式会话。
PermitTTY yesForceCommand将请求的命令替换为固定命令。启用之前请仔细验证访问和限制。
ForceCommand internal-sftpSubsystem常用定义具名子系统及其命令;internal-sftp 是内置 SFTP 服务器。
Subsystem sftp internal-sftpChrootDirectory身份验证后将会话限制到目录。严格检查目录所有权和权限;为预期会话提供所需的文件。
ChrootDirectory /srv/sftp/%uMatch常用启动条件块来匹配用户、组、地址或其他支持的条件。其中只允许使用某些指令。
Match User sftpuser
ForceCommand internal-sftpInclude常用按路径或 glob 包含配置文件。排序很重要,因为通常应用第一个获得的值。
Include /etc/ssh/sshd_config.d/*.confLogLevel常用设置日志记录详细程度,例如 QUIET、FATAL、ERROR、INFO、VERBOSE 或 DEBUG。详细的日志可能会暴露敏感信息。
LogLevel INFOSyslogFacility选择用于 SSH 服务器消息的系统日志工具;系统日志记录配置决定它们出现的位置。
SyslogFacility AUTHBanner在身份验证之前发送指定文件的内容。使用 none 禁用已配置的横幅。
Banner /etc/issue.netAcceptEnv允许命名客户端提供的环境变量。有些变量可以绕过受限环境,因此仅允许需要的变量。
AcceptEnv LANG LC_*PermitUserEnvironment控制用户提供的环境设置。启用它们可以通过环境变量绕过限制。
PermitUserEnvironment noPrintMotd控制 sshd 是否在交互式登录时打印当天的消息。 PAM 或其他服务也可以打印它。
PrintMotd noCompression控制压缩。支持的值和时间因 OpenSSH 版本而异。
Compression noRekeyLimit设置数据阈值和(可选)重新生成密钥的时间间隔。使用适合服务器版本的值。
RekeyLimit 1G 1hCiphers选择允许的加密算法。替换默认列表可能会降低兼容性;使用 ssh -Q cipher 检查客户端支持的算法。
Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.comKexAlgorithms选择密钥交换算法。限制此列表可能会破坏客户端;验证双方的支持。
KexAlgorithms curve25519-sha256PubkeyAcceptedAlgorithms选择允许的公钥签名算法进行用户身份验证。在更改默认列表之前验证兼容性。
PubkeyAcceptedAlgorithms ssh-ed25519HostKeyAlgorithms选择服务器提供的主机密钥签名算法。配置的主机密钥必须支持所选的算法。
HostKeyAlgorithms ssh-ed25519TrustedUserCAKeys包含用于证书身份验证的受信任用户证书颁发机构公钥的文件。
TrustedUserCAKeys /etc/ssh/user_ca.pubRevokedKeys包含已撤销的公钥或密钥撤销列表的文件。丢失或不可读的配置文件可能会阻止公钥身份验证。
RevokedKeys /etc/ssh/revoked_keysAuthorizedPrincipalsFile指定文件,列出由可信 CA 签署的用户证书允许使用的主体;支持令牌展开。
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%uVersionAddendum将文本附加到 SSH 协议横幅; none 禁用添加的文本。
VersionAddendum noneAuthorizedKeysCommand运行受信任的、root 拥有的程序来获取公钥。配置其执行帐户并遵循手册的所有权要求。
AuthorizedKeysCommand /usr/local/libexec/ssh-keys %uAuthorizedKeysCommandUser用于运行 AuthorizedKeysCommand 的帐户;建议使用专用帐户。
AuthorizedKeysCommandUser sshkeysAuthorizedPrincipalsCommand运行受信任的程序来获取允许的证书主体。单独配置其执行帐户。
AuthorizedPrincipalsCommand /usr/local/libexec/ssh-principals %uAuthorizedPrincipalsCommandUser用于运行 AuthorizedPrincipalsCommand 的帐户;使用专用帐户。
AuthorizedPrincipalsCommandUser sshprincipalsCASignatureAlgorithms限制 SSH 证书接受的证书颁发机构签名算法。在更改之前验证 CA 和客户端兼容性。
CASignatureAlgorithms ssh-ed25519ChannelTimeout按通道类型和持续时间使非活动通道过期;可用性和支持的通道类型取决于版本。到期不需要终止 SSH 连接。
ChannelTimeout session=1hExposeAuthInfo通过 SSH_USER_AUTH 引用的临时文件暴露身份验证信息;考虑访问身份验证详细信息。
ExposeAuthInfo noFingerprintHash选择用于密钥指纹的哈希,例如 sha256 或 md5。首选 SHA-256。
FingerprintHash sha256GSSAPIAuthentication当服务器版本支持时控制 GSSAPI 用户身份验证。
GSSAPIAuthentication noGSSAPICleanupCredentials控制委派的 GSSAPI 凭据是否在注销时被销毁;构建支持各不相同。
GSSAPICleanupCredentials yesGSSAPIDelegateCredentials控制存储用户会话的委派 GSSAPI 凭据(如果支持)。
GSSAPIDelegateCredentials noGSSAPIStrictAcceptorCheck控制服务器是否需要正确的 GSSAPI 主机标识。禁用验证会产生安全隐患。
GSSAPIStrictAcceptorCheck yesHostbasedAcceptedAlgorithms选择基于主机的身份验证接受的算法。可用性因 OpenSSH 版本而异。
HostbasedAcceptedAlgorithms ssh-ed25519HostbasedAuthentication控制基于主机的身份验证;它需要额外的信任和主机配置。
HostbasedAuthentication noHostbasedUsesNameFromPacketOnly控制基于主机的身份验证是否使用客户端提供的名称而不是 DNS。审查信任影响。
HostbasedUsesNameFromPacketOnly noHostKeyAgent指定用于访问主机私钥的代理套接字。代理及其套接字必须可供 sshd 使用。
HostKeyAgent /run/ssh-hostkey-agent.sockIgnoreRhosts控制每用户 rhosts 或 shosts 文件的使用以进行基于主机的身份验证;接受的值因版本而异。
IgnoreRhosts yesIgnoreUserKnownHosts控制在基于主机的身份验证期间是否忽略用户特定的known_hosts 文件。
IgnoreUserKnownHosts yesKerberosAuthentication在构建和配置 Kerberos 支持时控制 Kerberos 密码身份验证。
KerberosAuthentication noKerberosGetAFSToken在构建支持的情况下,控制为经过 Kerberos 身份验证的用户获取 AFS 令牌。
KerberosGetAFSToken noKerberosOrLocalPasswd控制失败的 Kerberos 密码验证是否回退到本地密码身份验证。
KerberosOrLocalPasswd noKerberosTicketCleanup在支持的情况下,控制在注销时删除用户的 Kerberos 票证缓存。
KerberosTicketCleanup yesLogVerbose覆盖匹配源位置的日志记录详细程度。它旨在用于故障排除,并可能会暴露敏感信息。
LogVerbose kex.c:*:1000ModuliFile用于 Diffie-Hellman 组交换的模文件的路径;根据平台指导进行维护。
ModuliFile /etc/ssh/moduliPAMServiceName在支持此指令的版本上选择 PAM 服务名称;所选服务的 PAM 策略必须存在。
PAMServiceName sshdPermitTunnel控制 tun 设备转发:yes、point-to-point、ethernet 或 no。可能需要额外的系统权限和配置。
PermitTunnel noPermitUserRC控制用户的 SSH rc 文件的执行。禁用它可能会影响用户会话设置。
PermitUserRC noPerSourceMaxStartups限制每个源地址或源组的同时未经身份验证的连接;版本支持有所不同。
PerSourceMaxStartups 10PerSourceNetBlockSize设置用于对每个源连接限制的源进行分组的 IPv4 和 IPv6 前缀长度。
PerSourceNetBlockSize 32:128PerSourcePenalties配置对有问题的来源的惩罚。支持的惩罚类型、值和默认值因 OpenSSH 版本而异。
PerSourcePenalties noPerSourcePenaltyExemptList列出免受每个源处罚的源地址或 CIDR 范围;确保豁免范围狭窄。
PerSourcePenaltyExemptList 192.0.2.0/24PidFile服务器进程 ID 文件的路径。确保服务管理员和权限同意此路径。
PidFile /run/sshd.pidPrintLastLog控制打印上次登录时间以进行交互式登录。可用性可能取决于平台支持。
PrintLastLog yesPubkeyAuthOptions设置公钥身份验证选项,包括安全密钥触摸或验证要求(如果支持)。
PubkeyAuthOptions touch-requiredRefuseConnection拒绝连接,通常在 Match 块内。可用性因版本而异。
Match User blocked
RefuseConnection yesRequiredRSASize设置 sshd 接受的最小 RSA 密钥大小。较低的值可能会削弱安全性,并且某些版本会施加最小值。
RequiredRSASize 3072RDomain在支持路由域的平台上为会话选择路由域。这是特定于平台的。
RDomain 1SecurityKeyProviderFIDO 安全密钥中间件库的路径;如果不设置它,则会使用可用的内置支持。
SecurityKeyProvider /usr/local/lib/libsk-libfido2.soSshdAuthPath支持 sshd 身份验证帮助程序的版本和平台上的路径。通常由包管理。
SshdAuthPath /usr/libexec/sshd-authSshdSessionPath支持 sshd 会话帮助程序的版本和平台上的路径。通常由包管理。
SshdSessionPath /usr/libexec/sshd-sessionStreamLocalBindMask设置 Unix 域转发套接字的八进制文件模式创建掩码。
StreamLocalBindMask 0177StreamLocalBindUnlink控制在创建转发侦听器之前是否删除现有的 Unix 域套接字。
StreamLocalBindUnlink noUnusedConnectionTimeout在指定时间后关闭没有开放通道的连接。受影响的行为和可用性因版本而异。
UnusedConnectionTimeout 5mX11DisplayOffset设置可用于 X11 转发的第一个显示号码。
X11DisplayOffset 10X11UseLocalhost启用时将X11转发服务器绑定到环回;禁用它可以更广泛地暴露显示。
X11UseLocalhost yesXAuthLocation用于 X11 转发的 xauth 程序的路径(如果适用)。
XAuthLocation /usr/bin/xauthIPQoS为交互式和非交互式会话设置 IP 服务质量标记。网络设备可能会解释或忽略这些标记。
IPQoS lowdelay throughputMACs选择消息验证码算法。更改默认值可能会影响安全性和客户端兼容性。
MACs hmac-sha2-256-etm@openssh.comSetEnv为子会话设置环境变量。这些值覆盖从客户端或用户环境文件接受的变量。
SetEnv LANG=en_US.UTF-8UseDNS控制连接客户端的反向 DNS 查找和验证。如果 DNS 速度较慢,启用它可能会增加延迟。
UseDNS no推荐起步配置
适用于已验证公钥登录可用、且不需要键盘交互式认证的服务器。已认证用户仍可使用 TCP 端口转发;远程转发监听限制在回环地址。
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
AllowTcpForwarding yes
GatewayPorts no此配置会关闭密码和键盘交互式登录,后者可能包括 PAM 或一次性验证码。请先确认其他管理员账号及其密钥能够登录。AllowTcpForwarding yes 允许已认证用户使用转发,请按需限制访问。请根据实际需求调整。
保持当前会话和恢复方式可用。将设置合并到现有配置,不要直接追加:Include 的顺序、较早的配置值和 Match 块可能影响结果。先运行 sshd -t,再用 sshd -T 检查生效配置;涉及 Match 时使用 sshd -T -C 检查对应条件。按系统服务流程应用后,验证第二个登录会话成功,再断开原会话。
权威参考
核对日期:2026 年 10 月 27 日