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 2222
ListenAddress常用

sshd 监听的本地地址。地址可以包含端口;确保它存在于服务器上。

示例
ListenAddress 192.0.2.10
AddressFamily

选择地址系列:any、inet(适用于 IPv4)或 inet6(适用于 IPv6)。

示例
AddressFamily inet
HostKey常用

服务器私有主机密钥的路径;这不是用户的身份验证密钥。保护私人文件。

示例
HostKey /etc/ssh/ssh_host_ed25519_key
HostCertificate

与配置的主机密钥匹配的服务器主机证书的路径。

示例
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
PasswordAuthentication常用

允许或禁止密码认证。禁用密码认证前,请先验证其他登录方式可用。

示例
PasswordAuthentication no
PubkeyAuthentication常用

允许或拒绝公钥身份验证。服务器权限和授权密钥仍然适用。

示例
PubkeyAuthentication yes
KbdInteractiveAuthentication常用

允许键盘交互式身份验证。提示和可用方法取决于服务器和身份验证后端。

示例
KbdInteractiveAuthentication yes
AuthenticationMethods常用

需要空格分隔的方法列表之一;列表中的每个以逗号分隔的方法都必须成功。还必须启用每种方法。

示例
AuthenticationMethods publickey,keyboard-interactive
PermitRootLogin常用

控制 root 登录:yes、prohibit-password、forced-commands-only 或 no。修改前请先测试其他管理员登录方式。

示例
PermitRootLogin no
PermitEmptyPasswords

允许具有空密码的帐户使用密码身份验证进行身份验证。启用此功能是不安全的。

示例
PermitEmptyPasswords no
AuthorizedKeysFile常用

包含授权公钥的文件的路径。相对路径是从用户的主目录解析的;支持令牌。

示例
AuthorizedKeysFile .ssh/authorized_keys
StrictModes常用

在接受登录之前检查用户文件和主目录的所有权和权限。

示例
StrictModes yes
AllowUsers常用

仅允许列出的用户名模式; USER@HOST 模式可以限制来源。帐户访问还受到其他限制。

示例
AllowUsers alice bob
DenyUsers

拒绝匹配的用户名模式。拒绝规则优先于相应的允许规则。

示例
DenyUsers guest
AllowGroups

仅允许匹配命名组中的用户,并遵守其他访问规则。

示例
AllowGroups sshusers
DenyGroups

拒绝匹配命名组中的用户;使用组名称,而不是数字 ID。

示例
DenyGroups restricted
AllowTcpForwarding常用

控制 TCP 转发:yes 或 all、no、local 或 remote。仅靠此设置无法阻止具有不受限制的 shell 权限的用户自行转发。

示例
AllowTcpForwarding local
DisableForwarding

禁用转发功能,覆盖其他转发设置。这可能会破坏隧道和代理或 X11 转发。

示例
DisableForwarding yes
GatewayPorts常用

控制远程转发绑定地址:no 绑定环回,yes 绑定通配符,clientspecified 允许客户端选择的地址。暴露端口会带来安全隐患。

示例
GatewayPorts no
PermitOpen

限制本地 TCP 转发的目标;可指定 host:port、any 或 none。匹配时不会解析主机名。

示例
PermitOpen db.example.com:5432
PermitListen

限制远程转发的监听地址和端口; GatewayPorts 也会影响绑定。

示例
PermitListen localhost:18080
AllowAgentForwarding

允许 SSH 身份验证代理转发。有权访问代理套接字的远程进程可以请求签名。

示例
AllowAgentForwarding no
AllowStreamLocalForwarding

控制 Unix 域套接字转发:yes 或 all、no、local 或 remote。

示例
AllowStreamLocalForwarding no
X11Forwarding

启用 X11 显示转发。仅在需要时启用并了解远程显示访问风险。

示例
X11Forwarding no
MaxAuthTries常用

断开连接之前每个连接的最大身份验证尝试次数。服务器可能会更早地记录故障。

示例
MaxAuthTries 4
MaxSessions常用

每个 SSH 连接的最大 shell、登录或子系统会话数。设置为零会阻止会话,但仍可能允许转发。

示例
MaxSessions 10
MaxStartups常用

限制未经身份验证的连接。 start:rate:full 形式逐渐拒绝负载下的连接。

示例
MaxStartups 10:30:100
LoginGraceTime常用

允许认证的时间;持续时间为零意味着没有时间限制。

示例
LoginGraceTime 60s
ClientAliveInterval常用

加密 SSH 级客户端活动探测的时间间隔(以秒为单位);零禁用这些探测器。

示例
ClientAliveInterval 30
ClientAliveCountMax常用

断开连接之前容忍的未应答的 SSH 级客户端活动探测的数量。与 ClientAliveInterval 一起使用。

示例
ClientAliveCountMax 3
TCPKeepAlive

控制 TCP keepalive 消息。这些与加密的 SSH 客户端活动探测是分开的。

示例
TCPKeepAlive yes
UsePAM常用

在支持 PAM 的构建上启用 PAM 集成。 PAM 策略和可用的身份验证方法因系统而异。

示例
UsePAM yes
PermitTTY

允许分配伪终端。禁用它会影响交互式会话。

示例
PermitTTY yes
ForceCommand

将请求的命令替换为固定命令。启用之前请仔细验证访问和限制。

示例
ForceCommand internal-sftp
Subsystem常用

定义具名子系统及其命令;internal-sftp 是内置 SFTP 服务器。

示例
Subsystem sftp internal-sftp
ChrootDirectory

身份验证后将会话限制到目录。严格检查目录所有权和权限;为预期会话提供所需的文件。

示例
ChrootDirectory /srv/sftp/%u
Match常用

启动条件块来匹配用户、组、地址或其他支持的条件。其中只允许使用某些指令。

示例
Match User sftpuser
    ForceCommand internal-sftp
Include常用

按路径或 glob 包含配置文件。排序很重要,因为通常应用第一个获得的值。

示例
Include /etc/ssh/sshd_config.d/*.conf
LogLevel常用

设置日志记录详细程度,例如 QUIET、FATAL、ERROR、INFO、VERBOSE 或 DEBUG。详细的日志可能会暴露敏感信息。

示例
LogLevel INFO
SyslogFacility

选择用于 SSH 服务器消息的系统日志工具;系统日志记录配置决定它们出现的位置。

示例
SyslogFacility AUTH
Banner

在身份验证之前发送指定文件的内容。使用 none 禁用已配置的横幅。

示例
Banner /etc/issue.net
AcceptEnv

允许命名客户端提供的环境变量。有些变量可以绕过受限环境,因此仅允许需要的变量。

示例
AcceptEnv LANG LC_*
PermitUserEnvironment

控制用户提供的环境设置。启用它们可以通过环境变量绕过限制。

示例
PermitUserEnvironment no
PrintMotd

控制 sshd 是否在交互式登录时打印当天的消息。 PAM 或其他服务也可以打印它。

示例
PrintMotd no
Compression

控制压缩。支持的值和时间因 OpenSSH 版本而异。

示例
Compression no
RekeyLimit

设置数据阈值和(可选)重新生成密钥的时间间隔。使用适合服务器版本的值。

示例
RekeyLimit 1G 1h
Ciphers

选择允许的加密算法。替换默认列表可能会降低兼容​​性;使用 ssh -Q cipher 检查客户端支持的算法。

示例
Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com
KexAlgorithms

选择密钥交换算法。限制此列表可能会破坏客户端;验证双方的支持。

示例
KexAlgorithms curve25519-sha256
PubkeyAcceptedAlgorithms

选择允许的公钥签名算法进行用户身份验证。在更改默认列表之前验证兼容性。

示例
PubkeyAcceptedAlgorithms ssh-ed25519
HostKeyAlgorithms

选择服务器提供的主机密钥签名算法。配置的主机密钥必须支持所选的算法。

示例
HostKeyAlgorithms ssh-ed25519
TrustedUserCAKeys

包含用于证书身份验证的受信任用户证书颁发机构公钥的文件。

示例
TrustedUserCAKeys /etc/ssh/user_ca.pub
RevokedKeys

包含已撤销的公钥或密钥撤销列表的文件。丢失或不可读的配置文件可能会阻止公钥身份验证。

示例
RevokedKeys /etc/ssh/revoked_keys
AuthorizedPrincipalsFile

指定文件,列出由可信 CA 签署的用户证书允许使用的主体;支持令牌展开。

示例
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
VersionAddendum

将文本附加到 SSH 协议横幅; none 禁用添加的文本。

示例
VersionAddendum none
AuthorizedKeysCommand

运行受信任的、root 拥有的程序来获取公钥。配置其执行帐户并遵循手册的所有权要求。

示例
AuthorizedKeysCommand /usr/local/libexec/ssh-keys %u
AuthorizedKeysCommandUser

用于运行 AuthorizedKeysCommand 的帐户;建议使用专用帐户。

示例
AuthorizedKeysCommandUser sshkeys
AuthorizedPrincipalsCommand

运行受信任的程序来获取允许的证书主体。单独配置其执行帐户。

示例
AuthorizedPrincipalsCommand /usr/local/libexec/ssh-principals %u
AuthorizedPrincipalsCommandUser

用于运行 AuthorizedPrincipalsCommand 的帐户;使用专用帐户。

示例
AuthorizedPrincipalsCommandUser sshprincipals
CASignatureAlgorithms

限制 SSH 证书接受的证书颁发机构签名算法。在更改之前验证 CA 和客户端兼容性。

示例
CASignatureAlgorithms ssh-ed25519
ChannelTimeout

按通道类型和持续时间使非活动通道过期;可用性和支持的通道类型取决于版本。到期不需要终止 SSH 连接。

示例
ChannelTimeout session=1h
ExposeAuthInfo

通过 SSH_USER_AUTH 引用的临时文件暴露身份验证信息;考虑访问身份验证详细信息。

示例
ExposeAuthInfo no
FingerprintHash

选择用于密钥指纹的哈希,例如 sha256 或 md5。首选 SHA-256。

示例
FingerprintHash sha256
GSSAPIAuthentication

当服务器版本支持时控制 GSSAPI 用户身份验证。

示例
GSSAPIAuthentication no
GSSAPICleanupCredentials

控制委派的 GSSAPI 凭据是否在注销时被销毁;构建支持各不相同。

示例
GSSAPICleanupCredentials yes
GSSAPIDelegateCredentials

控制存储用户会话的委派 GSSAPI 凭据(如果支持)。

示例
GSSAPIDelegateCredentials no
GSSAPIStrictAcceptorCheck

控制服务器是否需要正确的 GSSAPI 主机标识。禁用验证会产生安全隐患。

示例
GSSAPIStrictAcceptorCheck yes
HostbasedAcceptedAlgorithms

选择基于主机的身份验证接受的算法。可用性因 OpenSSH 版本而异。

示例
HostbasedAcceptedAlgorithms ssh-ed25519
HostbasedAuthentication

控制基于主机的身份验证;它需要额外的信任和主机配置。

示例
HostbasedAuthentication no
HostbasedUsesNameFromPacketOnly

控制基于主机的身份验证是否使用客户端提供的名称而不是 DNS。审查信任影响。

示例
HostbasedUsesNameFromPacketOnly no
HostKeyAgent

指定用于访问主机私钥的代理套接字。代理及其套接字必须可供 sshd 使用。

示例
HostKeyAgent /run/ssh-hostkey-agent.sock
IgnoreRhosts

控制每用户 rhosts 或 shosts 文件的使用以进行基于主机的身份验证;接受的值因版本而异。

示例
IgnoreRhosts yes
IgnoreUserKnownHosts

控制在基于主机的身份验证期间是否忽略用户特定的known_hosts 文件。

示例
IgnoreUserKnownHosts yes
KerberosAuthentication

在构建和配置 Kerberos 支持时控制 Kerberos 密码身份验证。

示例
KerberosAuthentication no
KerberosGetAFSToken

在构建支持的情况下,控制为经过 Kerberos 身份验证的用户获取 AFS 令牌。

示例
KerberosGetAFSToken no
KerberosOrLocalPasswd

控制失败的 Kerberos 密码验证是否回退到本地密码身份验证。

示例
KerberosOrLocalPasswd no
KerberosTicketCleanup

在支持的情况下,控制在注销时删除用户的 Kerberos 票证缓存。

示例
KerberosTicketCleanup yes
LogVerbose

覆盖匹配源位置的日志记录详细程度。它旨在用于故障排除,并可能会暴露敏感信息。

示例
LogVerbose kex.c:*:1000
ModuliFile

用于 Diffie-Hellman 组交换的模文件的路径;根据平台指导进行维护。

示例
ModuliFile /etc/ssh/moduli
PAMServiceName

在支持此指令的版本上选择 PAM 服务名称;所选服务的 PAM 策略必须存在。

示例
PAMServiceName sshd
PermitTunnel

控制 tun 设备转发:yes、point-to-point、ethernet 或 no。可能需要额外的系统权限和配置。

示例
PermitTunnel no
PermitUserRC

控制用户的 SSH rc 文件的执行。禁用它可能会影响用户会话设置。

示例
PermitUserRC no
PerSourceMaxStartups

限制每个源地址或源组的同时未经身份验证的连接;版本支持有所不同。

示例
PerSourceMaxStartups 10
PerSourceNetBlockSize

设置用于对每个源连接限制的源进行分组的 IPv4 和 IPv6 前缀长度。

示例
PerSourceNetBlockSize 32:128
PerSourcePenalties

配置对有问题的来源的惩罚。支持的惩罚类型、值和默认值因 OpenSSH 版本而异。

示例
PerSourcePenalties no
PerSourcePenaltyExemptList

列出免受每个源处罚的源地址或 CIDR 范围;确保豁免范围狭窄。

示例
PerSourcePenaltyExemptList 192.0.2.0/24
PidFile

服务器进程 ID 文件的路径。确保服务管理员和权限同意此路径。

示例
PidFile /run/sshd.pid
PrintLastLog

控制打印上次登录时间以进行交互式登录。可用性可能取决于平台支持。

示例
PrintLastLog yes
PubkeyAuthOptions

设置公钥身份验证选项,包括安全密钥触摸或验证要求(如果支持)。

示例
PubkeyAuthOptions touch-required
RefuseConnection

拒绝连接,通常在 Match 块内。可用性因版本而异。

示例
Match User blocked
    RefuseConnection yes
RequiredRSASize

设置 sshd 接受的最小 RSA 密钥大小。较低的值可能会削弱安全性,并且某些版本会施加最小值。

示例
RequiredRSASize 3072
RDomain

在支持路由域的平台上为会话选择路由域。这是特定于平台的。

示例
RDomain 1
SecurityKeyProvider

FIDO 安全密钥中间件库的路径;如果不设置它,则会使用可用的内置支持。

示例
SecurityKeyProvider /usr/local/lib/libsk-libfido2.so
SshdAuthPath

支持 sshd 身份验证帮助程序的版本和平台上的路径。通常由包管理。

示例
SshdAuthPath /usr/libexec/sshd-auth
SshdSessionPath

支持 sshd 会话帮助程序的版本和平台上的路径。通常由包管理。

示例
SshdSessionPath /usr/libexec/sshd-session
StreamLocalBindMask

设置 Unix 域转发套接字的八进制文件模式创建掩码。

示例
StreamLocalBindMask 0177
StreamLocalBindUnlink

控制在创建转发侦听器之前是否删除现有的 Unix 域套接字。

示例
StreamLocalBindUnlink no
UnusedConnectionTimeout

在指定时间后关闭没有开放通道的连接。受影响的行为和可用性因版本而异。

示例
UnusedConnectionTimeout 5m
X11DisplayOffset

设置可用于 X11 转发的第一个显示号码。

示例
X11DisplayOffset 10
X11UseLocalhost

启用时将X11转发服务器绑定到环回;禁用它可以更广泛地暴露显示。

示例
X11UseLocalhost yes
XAuthLocation

用于 X11 转发的 xauth 程序的路径(如果适用)。

示例
XAuthLocation /usr/bin/xauth
IPQoS

为交互式和非交互式会话设置 IP 服务质量标记。网络设备可能会解释或忽略这些标记。

示例
IPQoS lowdelay throughput
MACs

选择消息验证码算法。更改默认值可能会影响安全性和客户端兼容性。

示例
MACs hmac-sha2-256-etm@openssh.com
SetEnv

为子会话设置环境变量。这些值覆盖从客户端或用户环境文件接受的变量。

示例
SetEnv LANG=en_US.UTF-8
UseDNS

控制连接客户端的反向 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 日