sshd配置文件

一般默认新装的linux系统都会有sshd服务。sshd服务的配置文件存放在/etc/ssh/目录下,该目录下不仅存放着配置文件,本机的秘钥对也在该目录下

# ll /etc/ssh/
total 612
-rw-r--r--. 1 root root 581843 Aug  9  2019 moduli
-rw-r--r--. 1 root root   2276 Aug  9  2019 ssh_config
-rw-------  1 root root   3797 Sep 25 10:55 sshd_config
……

可以看到上面有两个以config结尾的文件,这两个都是配置文件,ssh_config是针对客户端的配置文件,而sshd_config则是针对服务端的配置文件。

Table of Contents

ssh_config

我们首先来看客户端的配置文件,这个配置文件较为简单。

选项参数                              说明
Host *                                    选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
ForwardAgent no                           设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no                             设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
RhostsAuthentication no                   设置是否使用基于rhosts的安全验证
RhostsRSAAuthentication no            设置是否使用用RSA算法的基于rhosts的安全验证
RSAAuthentication yes                     设置是否使用RSA算法进行安全验证
PasswordAuthentication yes            设置是否使用口令验证
FallBackToRsh no                      设置如果用ssh连接出现错误是否自动使用rsh
UseRsh no                             设置是否在这台计算机上使用“rlogin/rsh”
BatchMode no                              如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用
CheckHostIP yes                           设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”
StrictHostKeyChecking no              如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接
IdentityFile ~/.ssh/identity              设置从哪个文件读取用户的RSA安全验证标识
Port 22                                   设置连接到远程主机的端口
Cipher blowfish                           设置加密用的密码
EscapeChar ~                              设置escape字符

sshd_config

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

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

# 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.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER  #SELinux配置SSH端口
#
#Port 22  #监听的服务器端口
#AddressFamily any  #any表示同时监听iPv4和iPv6地址
#ListenAddress 0.0.0.0  #监听iPv4地址
#ListenAddress ::  #监听iPv6地址

HostKey /etc/ssh/ssh_host_rsa_key  #SSH所使用的RSA私钥路径
#HostKey /etc/ssh/ssh_host_dsa_key  #SSH所使用的DSA私钥路径
HostKey /etc/ssh/ssh_host_ecdsa_key  #SSH所使用的ECDSA私钥路径
HostKey /etc/ssh/ssh_host_ed25519_key  #SSH所使用的ED25519私钥路径

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV  #设置在记录来自sshd的消息的时候,是否给出"Facility code"
#LogLevel INFO  #日志记录级别

# Authentication:

#LoginGraceTime 2m  #限定用户认证时间为2分钟
PermitRootLogin no  #是否允许root账号SSH登录,生成环境最好禁止root登录
#StrictModes yes  #设置SSH在接受登陆请求之前,是否检查用户根目录和rhosts文件的权限和所有权,建议开启
#MaxAuthTries 6  #指定每个链接最大允许的认证次数,默认值是6
#MaxSessions 10  #最大允许保持多少个连接,默认值是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
AuthorizedKeysFile .ssh/authorized_keys  #公钥验证文件路径

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication  #指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv进行远程主机名匹配时,是否进行反向域名查询
#IgnoreUserKnownHosts no  #是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes  #是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes  #是否启用密码登录验证,建议使用秘钥登录
#PermitEmptyPasswords no  #是否允许空密码

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no  #是否允许质疑-应答(challenge-response)认证

# Kerberos options
#KerberosAuthentication no #是否使用Kerberos认证
#KerberosOrLocalPasswd yes  #如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制(比如 /etc/passwd)
#KerberosTicketCleanup yes  #是否在用户退出登录后自动销毁用户的 ticket
#KerberosGetAFSToken no  #如果使用了AFS并且该用户有一个 Kerberos 5 TGT,那么开启该指令后,将会在访问用户的家目录前尝试获取一个AFS token
#KerberosUseKuserok yes

# GSSAPI options
GSSAPIAuthentication yes    #是否允许基于GSSAPI的用户认证
GSSAPICleanupCredentials no  #是否在用户退出登录后自动销毁用户凭证缓存
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication 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 ChallengeResponseAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM yes  #是否通过PAM验证

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no  #是否允许远程主机连接本地的转发端口
X11Forwarding yes  #是否允许X11转发
#X11DisplayOffset 10  #指定sshd(8)X11转发的第一个可用的显示区(display)数字。默认值是10
#X11UseLocalhost yes  #是否应当将X11转发服务器绑定到本地loopback地址
#PermitTTY yes
#PrintMotd yes  #指定sshd(8)是否在每一次交互式登录时打印 /etc/motd 文件的内容
#PrintLastLog yes  #指定sshd(8)是否在每一次交互式登录时打印最后一位用户的登录时间
#TCPKeepAlive yes  #指定系统是否向客户端发送 TCP keepalive 消息
#UseLogin no  #是否在交互式会话的登录过程中使用 login(1)
#UsePrivilegeSeparation sandbox  #是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离
#PermitUserEnvironment no  #指定是否允许sshd(8)处理~/.ssh/environment以及 ~/.ssh/authorized_keys中的 environment= 选项
#Compression delayed  #是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密
#ClientAliveInterval 0  #sshd(8)长时间没有收到客户端的任何数据,不发送"alive"消息
#ClientAliveCountMax 3  #sshd(8)在未收到任何客户端回应前最多允许发送多个"alive"消息,默认值是 3
#ShowPatchLevel no
UseDNS no  #是否使用dns反向解析
#PidFile /var/run/sshd.pid  #指定存放SSH守护进程的进程号的路径
#MaxStartups 10:30:100  #最大允许保持多少个未认证的连接
#PermitTunnel no  #是否允许tun(4)设备转发
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none  #将这个指令指定的文件中的内容在用户进行认证前显示给远程用户,默认什么内容也不显示,"none"表示禁用这个特性

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

# override default of no subsystems
Subsystem sftp  /usr/libexec/openssh/sftp-server  #配置一个外部子系统sftp及其路径

# Example of overriding settings on a per-user basis
#Match User anoncvs  #引入一个条件块。块的结尾标志是另一个 Match 指令或者文件结尾    
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server