Top

sshd_config

#	$OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
#	$FreeBSD$

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# Note that some of FreeBSD's defaults differ from OpenBSD's, and
# FreeBSD has a few additional options.

# 指定sshd监听的端口号。默认22,允许使用多种此类型的选型。
#Port 22
# 指定sshd使用的地址系列。有效参数为any(任意。默认值)、inet(仅使用IPv4)、inet6(仅使用IPv6)
#AddressFamily any
# 指定sshd监听的本地地址。可以使用以下形式:
         ListenAddress hostname|address [rdomain domain]
         ListenAddress hostname:port [rdomain domain]
         ListenAddress IPv4_address:port [rdomain domain]
         ListenAddress [hostname|address]:port [rdomain domain]
# 默认情况下侦听当前默认路由域上所有本地地址。允许使用多个ListenAddrss选项。
#ListenAddress 0.0.0.0
#ListenAddress ::

# 指定包含SSH使用的私有主机密钥的文件。
# 注意,这些文件不能是组/任意可访问的文件(及600模式,仅对root可读写),并且HostKeyAlgorithms选项限制sshd实际使用的密钥。
# 可以有多个主机密钥文件。也可以指定公共主机密钥文件。在这种情况下,对私钥的操作将委托给ssh-agent。
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
# 密码和密钥
# 指定在重新协商会话密钥之前可以传输的最大数据量,然后可选地指定在重新谈判会话密钥之前可能经过的最大时间量。
# 第一个参数以字节为单位,并可以用K、M、G后缀。默认值介于“1G”和“4G”之间,具体取决于密码。
# 第二个参数以秒为单位,可以使用时间格式部分中记录的任何单位。
# 默认值为default none,这意味着在发送或接收密码的默认数据量之后执行重密钥,并且不执行基于时间的重密钥。
#RekeyLimit default none

# Logging
# 指定sshd记录消息时使用的设施代码。
# 可用值为:DAEMON、USER、AUTH(默认)、	LOCAL0、LOCAL1、LOCAL2、LOCAL3、LOCAL4、LOCAL5、LOCAL6、LOCAL7。
#SyslogFacility AUTH
# 指定消息级别。
# 可用值为:QUIET、FATAL、ERROR、INFO(默认)、VERBOSE、DEBUG、DEBUG1、DEBUG2、DEBUG3。 
# 使用DEBUG级别进行日志记录会侵犯用户的隐私,因此不建议使用。
#LogLevel INFO

# Authentication:

# 如果用户未成功登录,则服务器在此之后断开连接。如果值为0,则没有时间限制。默认2分钟。
#LoginGraceTime 2m
# 指定root用户是否可以使用ssh登录。有效值为yes、prohibit-password(禁止密码)、forced-commands-only(仅强制命令)、no(默认)。
# 请注意,如果ChallengeResponseAuthentication和UsePAM都为yes,则PAM策略可能会覆盖此设置。
# 如果设置为prohibit-password,则将技能用root用户的密码和键盘交互身份验证。
# 如果将此选项设置为forced-commands-only,则将允许使用公钥身份验证的root登录,但前提是已指定command选项(即使通常不允许root登录,这对于执行远程备份也可能有用)。对root用户禁用所有其他身份验证方法。
# 如果此选项设置为no,则不允许root用户登录。
#PermitRootLogin no
# 指定sshd(8)在接受登录之前是否应检查文件模式以及用户文件和主目录的所有权。
# 这通常是可取的,因为新手有时会意外地将他们的目录或文件放在可写的位置。
# 默认值为yes。请注意,这不适用于ChootDirectory,其权限和所有权将无条件检查。
#StrictModes yes
# 指定每个连接允许的最大身份验证尝试次数。一旦故障数达到此值的一半,就会记录其他故障。默认值为6。
#MaxAuthTries 6
# 指定每个网络连接允许的最大打开shell、登录或子系统(例如sftp)会话数。
# 支持连接多路复用的客户端可以建立多个会话。
# 将MaxSessions设置为1将有效地禁用会话复用,而将其设置为0将阻止所有shell、登录和子系统会话,同时仍允许转发。
# 默认值为10。
#MaxSessions 10

# 指定是否允许公钥身份验证。
#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
# 默认检查.ssh/authorized_keys和.ssh/authrized_keys2。但是被安装程序覆写仅检查.ssh/authorized_keys
# 指定包含用于用户身份验证的公钥文件。
# 展开后,AuthorizedKeysFile被视为绝对路径或相对于用户主目录的路径。可以列出多个文件,用空格分隔。
# 或者,此选项可以设置为none,以跳过检查文件中的用户密钥。
AuthorizedKeysFile	.ssh/authorized_keys

# 指定列出证书身份验证所接受的主体名称的文件。
# 当使用由TrustedUserCAKeys中列出的密钥签名的证书时,此文件列出了名称,其中一个名称必须出现在证书中,才能接受身份验证。名称每行列出一个,前面有键选项。
#AuthorizedPrincipalsFile none

# 指定用于查找用户公钥的程序。程序必须由root拥有,不能被其他组或其他人写入,并由绝对路径指定。
# 参数接受TOKENS部分描述的令牌,如果未指定,则使用目标用户的用户名。
# 默认情况下不运行AuthorizedKeysCommand。
#AuthorizedKeysCommand none
# 指定运行AuthorizedKeysCommand的帐户下的用户。建议使用在主机上除了运行授权密钥命令之外没有其他角色的专用用户。
# 如果指定了AuthorizedKeysCommand,但未指定AuthorizedKeysCommandUser,则sshd将拒绝启动。
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
# 指定是否允许rhosts或/etc/hosts.equiv身份验证以及成功的公钥客户端主机身份验证(基于主机的身份验证)。默认为no。
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
# 指定sshd在HostbasedAuthentication期间是否应忽略用户的~/.ssh/known_hosts,而仅使用系统范围内的已知主机文件/etc/ssh/known_hosts。
# 默认值为“no”。
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
# 指定是否忽略每用户的.rhosts和.shosts文件。
#IgnoreRhosts yes

# Change to yes to enable built-in password authentication.
# 指定是否允许密码认证
#PasswordAuthentication no
# 如果允许使用密码认证,指定是否允许空密码账号登录
#PermitEmptyPasswords no

# Change to no to disable PAM authentication
# 指定是否允许键盘交互身份认证
#KbdInteractiveAuthentication yes

# Kerberos options
# 指定是否通过Kerberos KDC验证用户为PasswordAuthentication提供的密码。
# 要使用此选项,服务器需要一个Kerberos服务选项卡,该选项卡允许验证KDC的身份。默认为no。
#KerberosAuthentication no
# 如果通过Kerberos进行的密码验证失败,则将通过任何其他本地机制(如/etc/passwd)验证密码。默认值为yes。
#KerberosOrLocalPasswd yes
# 指定是否在注销时自动销毁用户的票证缓存文件。默认值为yes。
#KerberosTicketCleanup yes
# 如果AFS处于活动状态,并且用户具有Kerberos 5 TGT,请尝试在访问用户的主目录之前获取AFS令牌。默认为no。
#KerberosGetAFSToken no

# GSSAPI options
# 指定是否允许基于GSSAPI的用户身份验证。
#GSSAPIAuthentication no
# 指定是否在注销时自动销毁用户的凭据缓存。
#GSSAPICleanupCredentials yes

# Set this to 'no' to disable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
# PAM:Pluggable Authentication Module,可插拔身份验证模块。
# 如果设置为“yes”,则除PAM帐户和会话模块处理外,还将使用KbdInteractiveAuthentication和PasswordAuthentication对所有身份验证类型启用PAM身份验证。
# 由于PAM键盘交互身份验证通常起到与密码身份验证相同的作用,因此应禁用PasswordAuthentication或kbdInteractiveAuthentication。
# 启用此选项后,不能使用非root账户启动sshd。
#UsePAM yes

# 指定是否允许ssh-agent转发。默认值为yes。
# 请注意,禁用代理转发不会提高安全性,除非用户也被拒绝访问shell,因为他们总是可以安装自己的转发程序。
#AllowAgentForwarding yes
# 指定是否允许TCP转发。可用选项为yes(默认值)或all以允许TCP转发、no以阻止所有TCP转发、local以允许本地(从ssh的角度来看)转发、remote以允许远程转发。
# 请注意,禁用TCP转发并不能提高安全性,除非用户也被拒绝访问shell,因为他们总是可以安装自己的转发程序。
#AllowTcpForwarding yes
# 指定是否允许远程主机连接到为客户端转发的端口。
# 默认情况下,sshd将远程端口转发绑定到环回地址。这会阻止其他远程主机连接到转发端口。
# GatewayPorts可用于指定sshd应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。
# 参数可以是no,以强制远程端口转发仅对本地主机可用;yes,以强制将远程端口转发绑定到通配符地址,或指定客户端以允许客户端选择转发绑定到的地址。
# 默认值为no。
#GatewayPorts no
# 指定是否允许X11转发。
# 当X11转发被启用时,如果sshd代理显示被配置为监听通配符地址,则可能会对服务器和客户端显示有额外的暴露,尽管这不是默认设置。
# 此外,身份验证欺骗和身份验证数据验证和替换发生在客户端。
# 使用X11转发的安全风险是,当SSH客户端请求转发时,客户端的X11显示服务器可能会受到攻击。
# 系统管理员可能有这样一种立场,即他们希望保护客户机,这些客户机可能会在无意中请求X11转发,从而使自己受到攻击,这可能会保证不设置。
# 请注意,禁用X11转发不会阻止用户转发X11流量,因为用户可以始终安装自己的转发程序。
#X11Forwarding yes
# 指定可用于sshd X11转发的第一个显示号。这可以防止sshd干扰真正的X11服务器。默认值为10。
#X11DisplayOffset 10
# 指定sshd应将X11转发服务器绑定到环回地址还是通配符地址。
# 默认情况下,sshd将转发服务器绑定到环回地址,并将DISPLAY环境变量的主机名部分设置为localhost。
# 这会阻止远程主机连接到代理显示器。但是,一些旧的X11客户端可能无法使用此配置。
# X11UseLocalhost可以设置为no,以指定转发服务器应绑定到通配符地址。参数必须是yes或no。默认值为yes。
#X11UseLocalhost yes
# 指定是否允许pty分配。
#PermitTTY yes
# 指定当用户以交互方式登录时,sshd是否应打印/etc/motd。(在某些系统上,它也由shell、/etc/profile或等效程序打印。)
#PrintMotd yes
# 指定当用户以交互方式登录时,sshd是否应打印上次用户登录的日期和时间。默认值为yes。
#PrintLastLog yes
# 指定系统是否应向另一侧发送TCP保活消息。如果发送了这些消息,将正确注意到连接的中断或其中一台计算机的崩溃。
# 然而,这意味着,如果路由暂时关闭,连接将中断,一些人会觉得这很烦人。
# 另一方面,如果TCP保持有效,会话可能会无限期挂在服务器上,从而留下“幽灵”用户并消耗服务器资源。
# 默认值为yes(发送TCP保活消息),如果网络故障或客户端主机崩溃,服务器将通知。这避免了无限挂起会话。
# 要禁用TCP保活消息,该值应设置为no。
#TCPKeepAlive yes
# 指定~/.ssh/authorized_keys中的~/.sssh/environment和environment=options是否由sshd处理。有效选项是yes、no(默认)或指定要接受的环境变量名称的模式列表(例如“LANG,LC_*”)。
# 默认值为no。启用环境处理可能会使用LD_PRELOAD等机制在某些配置中绕过访问限制。
#PermitUserEnvironment no
# 指定在用户成功身份验证后是否启用压缩。参数必须是yes、delayed(yes的旧同义词)或no。默认值为yes。
#Compression delayed
# 设置超时间隔(以秒为单位),如果没有从客户端接收到数据,则sshd将通过加密通道发送消息,请求客户端响应。
# 默认值为0,表示这些消息不会发送到客户端。
#ClientAliveInterval 0
# 设置可以在没有sshd(8)从客户端接收任何消息的情况下发送的客户端活动消息的数量。
# 如果在发送客户端活动消息时达到此阈值,sshd将断开客户端,终止会话。
# 需要注意的是,客户端活动消息的使用与TCPKeepAlive非常不同。客户端活动消息是通过加密通道发送的,因此不会被欺骗。TCPKeepAlive启用的TCP保活选项是可欺骗的。
# 当客户端或服务器依赖于知道连接何时变得无响应时,客户端活动机制非常有用。
# 如果ClientAliveInterval设置为15,并且ClientAliveCountMax保留为默认值,则无响应的SSH客户端将在大约45秒后断开连接。将ClientAliveCountMax设置为零将禁用连接终止。
#ClientAliveCountMax 3
# 指定sshd是否应查找远程主机名,并检查远程IP地址的解析主机名是否映射回相同的IP地址。
# 如果此选项设置为no,则~/.ssh/authorized_keys from和sshd_config Match host指令中只能使用地址而不能使用主机名。
#UseDNS yes
# 指定包含SSH守护程序的进程ID的文件,或none表示不写入。默认值为/var/run/shd.pid。
#PidFile /var/run/sshd.pid
# 指定到SSH守护程序的未经身份验证的并发连接的最大数量。在身份验证成功或连接的LoginTraceTime过期之前,将删除其他连接。默认值为10:30:100。
# 或者,可以通过指定三个冒号分隔的值start:rate:full(例如“10:30:60”)来启用随机提前丢弃。如果当前存在未经验证的连接,sshd将以rate/100(30%)的概率拒绝连接尝试。如果未经认证的连接数达到满(60),则概率线性增加,并且拒绝所有连接尝试。
#MaxStartups 10:30:100
# 指定是否允许tun设备转发。参数必须是yes、point-to-point(第3层)、ethernet(第2层)或no。指定yes允许point-to-point和ethernet。
# 默认为no。
#PermitTunnel no
# 默认none表示不允许chroot
#ChrootDirectory none
# 指定sshd是否尝试向blacklistd守护程序发送身份验证成功和失败消息。
# 默认值为no。
# 为了与即将到来的blacklistd重命名保持向前兼容性,可以改用UseBlocklist别名。
#UseBlacklist no
# 可选地,指定要附加到连接时服务器发送的SSH协议横幅的附加文本。
# 默认值为“FreeBSD-20211221”。值none可用于禁用此功能。
#VersionAddendum FreeBSD-20211221
# 在允许身份验证之前,指定文件的内容将发送给远程用户。如果参数为none,则不显示横幅。
# 默认情况下,不显示横幅。
# no default banner path
#Banner none

# override default of no subsystems
# 配置外部子系统(例如文件传输守护程序)。
# 参数应该是子系统名称和要在子系统请求时执行的命令(带有可选参数)。
# 命令sftp服务器实现sftp文件传输子系统。
# 或者,名称internal-sftp实现进程内sftp服务器。这可以简化使用ChootDirectory在客户端上强制使用不同的文件系统根目录的配置。
# 默认情况下,未定义子系统。
Subsystem	sftp	/usr/libexec/sftp-server

# Example of overriding settings on a per-user basis
# 引入条件块。
# 如果匹配行中的所有条件都得到满足,则以下行中的关键字将覆盖配置文件全局部分中设置的关键字,直到另一个匹配行或文件结束。
# 如果一个关键字出现在满足的多个匹配块中,则只应用该关键字的第一个实例。
# Match的参数是一个或多个条件模式对或匹配所有条件的单个标记All。
# 可用条件为User、Group、Host、LocalAddress、LocalPort、RDomain和Address(RDomain表示接收连接的rdmain)。
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server