SSH是linux远程登录的安全协议,基于OpenSSH,在服务端和客户端都有守护进程配置文件,服务器端为/etc/ssh/sshd_config,客户端为/etc/ssh/ssh_config,用户配置文件为~/.ssh/config。
服务端主配置文件sshd_config的宿主必须为root,最大权限为"644"。
注意
配置文件由行界定的"指令 值"组成
通过双引号("")界定含有空格符或特殊符号的值
指令:大小写无关
值:大小写敏感
详情
AcceptEnv
指定客户端发送的哪些环境变量将会被传递到会话环境中,只有SSH-2协议支持环境变量的传递,细节可以参考SendEnv指令,默认是不传递任何环境变量。
指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符),也可以使用多个AcceptEnv达到相同的目的。需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量,由于这个原因,该指令应当小心使用。
AddressFamily
指定sshd应当使用哪种地址族,取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。
AllowGroups
这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。
如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组,这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组,只允许使用组的名字而不允许使用GID,allow/deny指令处理顺序是:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
AllowTcpForwarding
是否允许TCP转发,默认值为"yes"。
禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。
AllowUsers
这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符),默认允许所有用户登录。
如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户,如果指定了USER@HOST模式的用户,那么USER和HOST将同时被检查,只允许使用用户的名字而不允许使用UID。allow/deny处理顺序处理是:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
AuthorizedKeysFile
存放该用户可以用来登录的RSA/DSA公钥,该指令中可以使用下列根据连接时的实际情况进行展开的符号:
%% 表示'%'、%h表示用户的主目录、%u 表示该用户的用户名
经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径,默认值是".ssh/authorized_keys"。
Banner
将这个指令指定的文件中的内容在用户进行认证前显示给远程用户,这个特性仅能用于SSH-2,默认什么内容也不显示,"none"表示禁用这个特性。
ChallengeResponseAuthentication
是否允许质疑-应答(challenge-response)认证,默认值是"yes"。
所有login.conf中允许的认证方式都被支持。
Ciphers
指定SSH-2允许使用的加密算法,多个算法之间使用逗号分隔,可以使用的算法如下:
"aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr",
"3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc"
默认值是可以使用上述所有算法。
ClientAliveCountMax
SSHD在未收到任何客户端回应前最多允许发送多少个"alive"消息,默认值是3。
到达上限后,sshd将强制断开连接、关闭会话。需要注意的是,"alive"消息与TCPKeepAlive有很大差异,"alive"消息是通过加密连接发送的,因此不会被欺骗,而TCPKeepAlive却是可以被欺骗的。如果ClientAliveInterval被设为15并且将ClientAliveCountMax保持为默认值,那么无应答的客户端大约会在45秒后被强制断开。该指令仅可以用于SSH-2协议。
ClientAliveInterval
设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,sshd将通过安全通道向客户端发送一个"alive"消息,并等候应答,默认值0表示不发送"alive"消息,该选项仅对SSH-2有效。
Compression
是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密,默认值是"delayed"。
其他可用值:"yes", "no"。
DenyGroups
这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符),默认允许所有组登录。
如果使用了这个指令,那么这些组中的成员将被拒绝登录,这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。只允许使用组的名字而不允许使用GID,allow/deny处理顺序是:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
DenyUsers
这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符),默认允许所有用户登录。
如果使用了这个指令,那么这些用户将被拒绝登录,如果指定了USER@HOST模式的用户,那么USER和HOST将同时被检查。只允许使用用户的名字而不允许使用UID,allow/deny处理列顺序是:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
ForceCommand
该命令最初是在客户端通过SSH_ORIGINAL_COMMAND环境变量来支持的,用于强制执行指定的命令而忽略客户端提供的任何命令,该命令将使用用户的登录shell执行(shell -c),可以应用于shell 、命令、子系统的完成,通常用于Match块中。
GatewayPorts
是否允许远程主机连接本地的转发端口,默认值是"no"。
SSHD默认将远程端口转发绑定到loopback地址,这样将阻止其它远程主机连接到转发端口。GatewayPorts指令可以让sshd将远程端口转发绑定到非loopback地址,这样就可以允许远程主机连接了。
"no"表示仅允许本地连接,"yes"表示强制将远程端口转发绑定到统配地址(wildcard address),"clientspecified"表示允许客户端选择将远程端口转发绑定到哪个地址。
GSSAPIAuthentication
是否允许使用基于GSSAPI的用户认证,仅用于SSH-2,默认值为"no"。
GSSAPICleanupCredentials
是否在用户退出登录后自动销毁用户凭证缓存,仅用于SSH-2,默认值是"yes"。
HostbasedAuthentication
该指令与RhostsRSAAuthentication类似,但是仅可以用于SSH-2,推荐使用默认值"no"禁止这种不安全的认证方式。
HostbasedUsesNameFromPacketOnly
在开启HostbasedAuthentication的情况下,指定服务器在使用~/.shosts ~/.rhosts /etc/hosts.equiv进行远程主机名匹配时,是否进行反向域名查询,默认值是"no","yes"表示sshd信任客户端提供的主机名而不进行反向查询。
HostKey
指定主机私钥文件的位置,如果权限错误,sshd可能会无法启动。
SSH-1默认是/etc/ssh/ssh_host_key。
SSH-2默认是/etc/ssh/ssh_host_rsa_key 和/etc/ssh/ssh_host_dsa_key。
一台主机可以拥有多个不同的私钥,"rsa1"仅用于SSH-1,"dsa"和"rsa"仅用于SSH-2。
IgnoreRhosts
是否在RhostsRSAAuthentication或HostbasedAuthentication过程中忽略.rhosts和.shosts文件,不过/etc/hosts.equiv和/etc/shosts.equiv仍将被使用,建议设为默认值"yes"。
IgnoreUserKnownHosts
是否在RhostsRSAAuthentication或HostbasedAuthentication过程中忽略用户的~/.ssh/known_hosts文件,默认值是"no"。
为了提高安全性,建议设为"yes"。
KerberosAuthentication
是否要求用户为PasswordAuthentication提供的密码必须通过Kerberos KDC 认证,即是否使用Kerberos认证,默认值是"no"。
要使用Kerberos认证,服务器需要一个可以校验KDC identity的Kerberos servtab。
KerberosGetAFSToken
如果使用了AFS并且该用户有一个Kerberos 5 TGT,那么开启该指令后,将会在访问用户的家目录前尝试获取一个AFS token,默认为"no"。
KerberosOrLocalPasswd
如果Kerberos密码认证失败,那么该密码还将要通过其它的认证机制(比如/etc/passwd),默认值为"yes"。
KerberosTicketCleanup
是否在用户退出登录后自动销毁用户的ticket,默认值是"yes"。
KeyRegenerationInterval
在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成,这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失,设为 0 表示永不重新生成,默认为3600(秒)。
ListenAddress
指定sshd监听的网络地址,默认监听所有地址,可以使用下面的格式:
ListenAddress host|IPv4_addr|IPv6_addr
ListenAddress host|IPv4_addr:port
ListenAddress [host|IPv6_addr]:port
如果未指定port,那么将使用Port指令的值,也可以使用多个ListenAddress指令监听不同的地址。
LoginGraceTime
限制用户必须在指定的时限内认证成功,0 表示无限制,默认值是120秒。
LogLevel
指定sshd的日志等级(详细程度),可用值包含:
QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
DEBUG与DEBUG1相同,DEBUG2和DEBUG3则分别指定了更详细、更罗嗦的日志输出,比DEBUG更详细的日志可能会泄漏用户的敏感信息,因此反对使用。
MACs
指定允许在SSH-2中使用哪些消息摘要算法来进行数据校验,可以使用逗号分隔的列表来指定允许使用多个算法,默认值(包含所有可以使用的算法)包含:
hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
Match
引入一个条件块,块的结尾标志是另一个Match指令或者文件结尾,如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。
Match的值是一个或多个"条件-模式"对,可用的"条件"是:User, Group, Host, Address,只有下列指令可以在Match块中使用:
AllowTcpForwarding, Banner,
ForceCommand, GatewayPorts, GSSApiAuthentication,
KbdInteractiveAuthentication, KerberosAuthentication,
PasswordAuthentication, PermitOpen, PermitRootLogin,
RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
X11Forwarding, X11UseLocalHost
MaxAuthTries
指定每个连接最大允许的认证次数,默认值是6。
如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。
MaxStartups
最大允许保持多少个未认证的连接,默认值是10 。
到达限制后,将不再接受新连接,除非先前的连接认证成功或超出LoginGraceTime的限制。
PasswordAuthentication
是否允许使用基于密码的认证,默认为"yes"。
PermitEmptyPasswords
是否允许密码为空的用户远程登录,默认为"no"。
PermitOpen
指定TCP端口转发允许的目的地,可以使用空格分隔多个转发目标,默认允许所有转发请求。
合法的指令格式:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
"any":用于移除所有限制并允许一切转发请求
PermitRootLogin
是否允许root登录,默认值是"yes"。
其他可设置的值:
"no":禁止
"without-password":禁止使用密码认证登录
"forced-commands-only":只有在指定了command选项的情况下才允许使用公钥认证登录,同时其它认证方法全部被禁止,常用于做远程备份等
PermitTunnel
是否允许tun设备转发,默认值是"no"。
可以设置为"yes"、"point-to-point"(layer 3)和"ethernet"(layer 2),当设置为"yes"时包含"point-to-point"和"ethernet"。
PermitUserEnvironment
指定是否允许sshd处理~/.ssh/environment以及~/.ssh/authorized_keys中的environment=选项,默认值是"no"。
如果设为"yes"可能会导致用户有机会使用某些机制(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。
PidFile
指定在哪个文件中存放SSH守护进程的进程号,默认为/var/run/sshd.pid。
Port
指定sshd守护进程监听的端口号,默认为 22 。
可以使用多条指令监听多个端口,默认将在本机的所有网络接口上监听,但是可以通过ListenAddress指定只在某个特定的接口上监听。
PrintLastLog
指定sshd是否在每一次交互式登录时打印最后一位用户的登录时间,默认值是"yes"。
PrintMotd
指定sshd是否在每一次交互式登录时打印/etc/motd文件的内容,默认值是"yes"。
Protocol
指定sshd支持的SSH协议的版本号,'1'和'2'表示仅仅支持SSH-1和SSH-2协议,"2,1"表示同时支持SSH-1和SSH-2协议。
PubkeyAuthentication
是否允许公钥认证,仅可以用于SSH-2,默认值为"yes"。
RhostsRSAAuthentication
是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证),仅用于SSH-1。这是通过在RSA认证成功后再检查~/.rhosts或/etc/hosts.equiv进行认证的,出于安全考虑,建议使用默认值"no"。
RSAAuthentication
是否允许使用纯RSA公钥认证,仅用于SSH-1,默认值是"yes"。
ServerKeyBits
指定临时服务器密钥的长度,仅用于SSH-1,默认值是 768(位),最小值是 512 。
StrictModes
指定是否要求sshd在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查,强烈建议使用默认值"yes"来预防可能出现的低级错误。
Subsystem
配置一个外部子系统,比如一个守护进程,仅用于SSH-2协议,值是一个子系统的名字和对应的命令行(含选项和参数),比如:
Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
SyslogFacility
指定sshd将日志消息通过哪个日志子系统(facility)发送,有效值是:
DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7
TCPKeepAlive
指定系统是否向客户端发送TCP keepalive消息,默认值是"yes"。
这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。
UseDNS
指定sshd是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应,默认值为"yes"。
UseLogin
是否在交互式会话的登录过程中使用login,默认值是"no"。
如果启用该指令,那么X11Forwarding将会被禁止,因为login不知道如何处理xauth cookies,需要注意的是,login是禁止用于远程执行命令的,如果指定UsePrivilegeSeparation,那么它将在认证完成后被禁用。
UsePrivilegeSeparation
是否让sshd通过创建非特权子进程处理接入请求的方法来进行权限分离,默认值是"yes"。
认证成功后,将以该认证用户的身份创建另一个子进程,目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。
X11DisplayOffset
指定sshd X11转发的第一个可用的显示区(display)数字,默认值是10。
用于防止sshd占用了真实的X11服务器显示区,以免混淆。
X11Forwarding
是否允许进行X11转发,默认值是"no",设为"yes"表示允许。
如果允许X11转发并且sshd代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听,将可能泄漏额外的信息。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器,除非启用UseLogin ,此时X11转发都会被自动禁止。
X11UseLocalhost
指定sshd是否应当将X11转发服务器绑定到本地loopback地址,默认值是"yes"。
SSHD默认将转发服务器绑定到本地loopback地址并将DISPLAY环境变量的主机名部分设为"localhost",用于防止远程主机连接到proxy display,可能旧X11客户端无法正常工作,为了兼容旧的X11客户端,建议设为"no"。
XAuthLocation
指定xauth程序的绝对路径,默认值是/usr/X11R6/bin/xauth。
其他
时间格式
在sshd命令行参数和配置文件中使用的时间值可以通过“<time>[<qualifier>]”格式指定。
<time>是时间整数,<qualifier>是时间单位,可以是:
<无> 秒
s | S 秒
m | M 分钟
h | H 小时
d | D 天
w | W 星期
也可以通过指定多个数值来累加时间,举例:
45m 1 小时 30 分钟 (90 分钟)
原创文章禁止转载:技术学堂 » Linux远程登录SSH配置sshd_config详解