sshd配置文件详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sshd配置文件详解相关的知识,希望对你有一定的参考价值。

[[email protected] ~]# cat /etc/ssh/sshd_config    

 SSH Server 的整体设定========================================================

#  $OpenBSD:sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

 

# This is the sshd server system-wide configurationfile.  See# sshd_config(5) for moreinformation.

 

# This sshd was compiled withPATH=/usr/local/bin:/bin:/usr/bin

 

# The strategy used for options in the defaultsshd_config shipped with

# OpenSSH is to specify options with their defaultvalue where

# possible, but leave them commented.  Uncommented options change a

# default value.

 

端口号:

#Port 22

port用来设置sshd监听的端口,为了安全起见,建议更改默认的22端口为5位以上陌生端口

sshd服务器绑定的IP地址:

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress ::  用来设置sshd服务器绑定的IP地址

监听的主机适配卡,举个例子来说,如果您有两个 IP分别是 10.0.0.61 172.16.1.61,那么只想要开放172.16.1.61时,就可以设置为:ListenAddress 172.16.1.61,表示只监听来自 172.16.1.61 这个IP SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH

 

sshd版本:

# Disable legacy (protocol version 1) support inthe server for new

# installations. In future the default will changeto require explicit

# activation of protocol 1     

Protocol 2

设置协议版本为SSH1SSH2SSH1存在漏洞与缺陷,选择SSH2

设置包含计算机私人秘钥的文件:

HostKey用来设置服务器秘钥文件的路径

# HostKey for protocol version 1

#HostKey /etc/ssh/ssh_host_key

 设置SSHversion 1使用的私钥

# HostKeys for protocol version 2

#HostKey /etc/ssh/ssh_host_rsa_key

设置SSHversion 2 使用的 RSA 私钥

#HostKey /etc/ssh/ssh_host_dsa_key

设置SSHversion 2 使用的 DSA 私钥

定义服务器秘钥的位数:

# Lifetime and size of ephemeral version 1 serverkey

# KeyRegenerationInterval 1h 

秘钥再生的间隔时间

#ServerKeyBits 1024

服务器秘钥位

日志:

# Logging

# obsoletes QuietMode and FascistLogging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV 

日志FacilityAUTHPRIV

SyslogFacility用来设定在记录来自sshd的消息的时候,是否给出“facility code”(代码)

#LogLevel INFO

LogLevel用来设定sshd日志消息的级别

安全认证方面的设定==================================================================

 

# Authentication:

限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。

 

#LoginGraceTime 2m

LoginGraceTime用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为妙

#PermitRootLogin yes

PermitRootLogin用来设置能不能直接以超级用户ssh登录,root远程登录Linux很危险,建议注销或设置为no

#StrictModes yes

StrictModes用来设置ssh在接收登录请求之前是否检查用户根目录和rhosts文件的权限和所有权,建议开启

建议使用默认值"yes"来预防可能出现的低级错误。

#MaxAuthTries 6

只允许输错几次密码

MaxAuthTries 用来设置最大失败尝试登陆次数为6,合理设置次数,可以防止攻击者穷举登录服务器

#MaxSessions 10

最大支持几个ssh会话

密钥认证

#RSAAuthentication yes

RSAAuthentication用来设置是否开启RSA密钥验证,只针对SSH1

#PubkeyAuthentication yes

PubkeyAuthentication用来设置是否开启公钥验证,如果使用公钥验证的方式登录时,则设置为yes

#AuthorizedKeysFile .ssh/authorized_keys

AuthorizedKeysFile用来设置公钥验证文件的路径,与PubkeyAuthentication配合使用,默认值是".ssh/authorized_keys"

#AuthorizedKeysCommand none

#AuthorizedKeysCommandRunAs nobody

 

主机验证

# For this to work you will also need host keys in/etc/ssh/ssh_known_hosts

#RhostsRSAAuthentication no

是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1

这是通过在RSA认证成功后再检查 ~/.rhosts /etc/hosts.equiv进行认证的。出于安全考虑,建议使用默认值"no"

# similar for protocol version 2

#HostbasedAuthentication no

这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2

# Change to yes if you don‘t trust~/.ssh/known_hosts for

# RhostsRSAAuthentication andHostbasedAuthentication

#IgnoreUserKnownHosts no

IgnoreUserKnownHosts用来设置ssh在进行RhostsRSAAuthentication安全验证时是否忽略用户的“/$HOME/.ssh/known_hosts”文件

# Don‘t read the user‘s ~/.rhosts and ~/.shostsfiles

#IgnoreRhosts yes

IgnoreRhosts用来设置验证的时候是否使用“~/.rhosts”和“~/.shosts”文件

 

# To disable tunneled clear text passwords, changeto no here!

要禁用隧道明文密码, 请更改为 ""!

#PasswordAuthentication yes

PasswordAuthentication用来设置是否开启密码验证机制,如果用密码登录系统,则设置yes

#PermitEmptyPasswords no

PermitEmptyPasswords用来设置是否允许用口令为空的账号登录系统,设置no

PasswordAuthentication yes

 

是否开启挑战响应身份验证:

# Change to no to disable s/key passwords

设置禁用s/key密码

#ChallengeResponseAuthentication yes

是否允许质疑-应答(challenge-response)认证

ChallengeResponseAuthentication no

 

Kerberos身份验证:

# Kerberos options

#KerberosAuthentication no

是否要求用户为PasswdAuthentication提供的密码必须通过Kerberos KDC认证,要使用Kerberos认证,服务器必须提供一个可以校验KDC identityKerberos servtab。默认值为no

#KerberosOrLocalPasswd yes

如果Kerberos密码认证失败,那么该密码还将要通过其他的的认证机制,如/etc/passwd

在启用此项后,如果无法通过Kerberos验证,则密码的正确性将由本地的机制来决定,如/etc/passwd,默认为yes

#KerberosTicketCleanup yes

设置是否在用户退出登录是自动销毁用户的ticket

#KerberosGetAFSToken no

如果使用AFS并且该用户有一个Kerberos 5TGT,那么开启该指令后,将会在访问用户的家目录前尝试获取一个AFS token,并尝试传送 AFS token Server 端,默认为no

#KerberosUseKuserok yes

 

GSSAPI 有关的参数设定,指定是否允许基于GSSAPI的用户认证,仅适用于SSH2

GSSAPI 是一套类似 Kerberos 5 的通用网络安全系统接口。

如果你拥有一套GSSAPI库,就可以通过 tcp 连接直接建立 cvs 连接,由 GSSAPI 进行安全鉴别。

# GSSAPI options

#GSSAPIAuthentication no

GSSAPIAuthentication 指定是否允许基于GSSAPI的用户认证,默认为no

GSSAPIAuthentication yes

#GSSAPICleanupCredentials yes

GSSAPICleanupCredentials 设置是否在用户退出登录是自动销毁用户的凭证缓存

GSSAPICleanupCredentials yes

#GSSAPIStrictAcceptorCheck yes

#GSSAPIKeyExchange no

 

SSH服务端的PAM认证:

# Set this to ‘yes‘ to enable PAM authentication,account processing,

# and session processing. If this is enabled, PAMauthentication will

# be allowed through theChallengeResponseAuthentication and

# PasswordAuthentication.  Depending on your PAM configuration,

# PAM authentication viaChallengeResponseAuthentication may bypass

# the setting of "PermitRootLoginwithout-password".

# If you just want the PAM account and sessionchecks to run without

# PAM authentication, then enable this but set PasswordAuthentication

# and ChallengeResponseAuthentication to ‘no‘.

#UsePAM no

设置是否通过PAM验证

UsePAM yes

 

指定客户端发送的哪些环境变量将会被传递到会话环境中:

# Accept locale-related environment variables

AcceptEnv 指定客户端发送的哪些环境变量将会被传递到会话环境中。

 [注意]只有SSH-2协议支持环境变量的传递。指令的值是空格分隔的变量名列表(其中可以使用‘*‘‘?‘作为通配符)

也可以使用多个AcceptEnv 达到同样的目的。需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。

由于这个原因,该指令应当小心使用。默认是不传递任何环境变量。

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIMELC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONELC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

 

转发:

#AllowAgentForwarding yes

#AllowTcpForwarding yes

AllowTcpForwarding设置是否允许允许tcp端口转发,保护其他的tcp连接

远程主机连接本地转发端口:

#GatewayPorts no

#X11Forwarding no

GatewayPorts 设置是否允许远程客户端使用本地主机的端口转发功能,出于安全考虑,建议禁止

 

X11转发允许在SSH客户端上显示应用程序的图形部分,而逻辑程序依然在远程服务器上执行:

X11Forwarding yes

X11Forwarding 用来设置是否允许X11转发

#X11DisplayOffset 10

指定X11 转发的第一个可用的显示区(display)数字。默认值是 10

可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆

#X11UseLocalhost yes

 登陆后的相关设定======================================================================

允许或禁止登陆用户、组:

#PrintMotd yes

PrintMotd用来设置sshd是否在用户登录时显示“/etc/motd”中的信息,可以选在在“/etc/motd”中加入警告的信息

#PrintLastLog yes

PrintLastLog 是否显示上次用户登录信息

#TCPKeepAlive yes

TCPKeepAlive 是否持续发送tcp包,维持连接,设置yes可以防止死连接

一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常!

这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。在这个情况下,任何一端死掉后, SSH 可以立刻知道,而不会有僵尸程序的发生!

#UseLogin no

UseLogin 设置是否使用ssh服务端的login程序进行登录验证。默认值是"no"

如果开启此指令,那么X11Forwarding 将会被禁止,因为login不知道如何处理 xauth cookies

需要注意的是,在SSH底下本来就不接受 login 这个程序的登入,如果指UsePrivilegeSeparation ,那么它将在认证完成后被禁用

#UsePrivilegeSeparation yes

UsePrivilegeSeparation 设置使用者的权限

ssh服务端通过创建非特权子进程处理接入请求的方法来进行权限分离

 

#PermitUserEnvironment no

 

压缩选项yes

#Compression delayed

连接超时断开连接:

#ClientAliveInterval 0

设置一个以秒记得时长,如果超时这么长时间,没有收到客户端的任何数据,sshd将通过安全通道向客户端发送一个“alive”消息,并等候回答

#ClientAliveCountMax 3

sshd在未收到任何客户端回应前最多允许发送多少个alive消息,到达这个上限后,sshd将强制断开连接,关闭会话。

 

#ShowPatchLevel no

在连接ssh端口时,是否返回ssh的补丁版本信息

#UseDNS yes

UseDNS是否使对远程主机名进行dns反向解析,以检查此主机名是否与其IP地址真实对应。

#PidFile /var/run/sshd.pid

pid文件存放位置

 

允许有多少次验证连接请求:

#MaxStartups 10:30:100

MaxStartups 设置同时允许几个尚未登入的联机,当用户连上ssh但并未输入密码即为所谓的联机,

在这个联机中,为了保护主机,所以需要设置最大值,预设为10个,而已经建立联机的不计算入内,

所以一般5个即可,这个设置可以防止恶意对服务器进行连接

 

#PermitTunnel no

是否允许隧道

#ChrootDirectory none


# no default banner path

#Banner none

登录之前显示在用户屏幕上,后面跟着文件位置

 

配置一个外部的子系统,仅用于SSH-V2协议,一般这里使用sftp

# override default of no subsystems

Subsystem sftp  /usr/libexec/openssh/sftp-server

 

# Example of overriding settings on a per-userbasis

#Match User anoncvs

#  X11Forwardingno

#  AllowTcpForwardingno

#  ForceCommandcvs server

增加=================================================================================

#AllowUsers<用户名1> <用户名2> <用户名3> ...

##指定允许通过远程访问的用户,多个用户以空格隔开

#AllowGroups<组名1> <组名2> <组名3> ...

##指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。

#DenyUsers<用户名1> <用户名2> <用户名3> ...

##指定禁止通过远程访问的用户,多个用户以空格隔开

#DenyGroups<组名1> <组名2> <组名3> ...

##指定禁止通过远程访问的组,多个组以空格隔开。


以上是关于sshd配置文件详解的主要内容,如果未能解决你的问题,请参考以下文章

sshd配置文件详解

SSH服务器端/etc/ssh/sshd_conf配置文件详解

systemctl配置管理文件详解

Linux下的/etc/ssh/ssh_config文件配置详解SSH配置文件相关参数详细说明

sshd_config配置

简单了解sshd_config配置文件