SSH概述与配置文件说明

Wesley13
• 阅读 1292

一、什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。在出现SSH之前,系统管理员需要登入远程服务器执行系统管理任务时,都是用telnet来实现的,telnet协议采用明文密码传送,在传送过程中对数据也不加密,很容易被不怀好意的人在网络上监听到密码。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

二、首先了解下对称加密(也称为秘钥加密),非对称加密(也称公钥加密)
所谓对称加密,指加密解密使用同一套秘钥。对称加密的加密强度高,很难破解。但是在实际应用过程中不得不面临一个棘手的问题:如何安全的保存密钥呢?尤其是考虑到数量庞大的Client端,很难保证密钥不被泄露。一旦一个Client端的密钥被窃据,那么整个系统的安全性也就不复存在。为了解决这个问题,非对称加密应运而生。
非对称加密有两个密钥:“公钥”和“私钥”。公开的密钥称为公钥,不公开的密钥称为私钥,两个密钥的特性:公钥加密后的密文,只能通过对应的私钥进行解密。而通过公钥推理出私钥的可能性微乎其微。也可以通过私钥进行加密,在通过公钥进行密码,这种方式多用于数字签名。
远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。Client使用这个公钥,将密码进行加密。Client将加密的密码发送给Server端。
远程Server用自己的私钥,解密登录密码,然后验证其合法性。通过验证结果,给Client相应的响应。私钥是Server端独有,这就保证了Client登录信息即使在网络传输过程中被窃取,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性

在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
不同算法的实现机制不同,可参考对应算法的详细资料。

在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)、ECDSA(椭圆曲线数字签名算法)等。
不同算法的实现机制不同,可参考对应算法的详细资料。

三、SSH两种方式的用户登录认证:
SSH连接是CS模型(客户端-服务器),客户端发出连接申请,服务器对客户端进行验证,再考虑是否接受连接申请。
SSH的安全加密方式的理论基础是非对称加密体系

1、基于password:

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

大致流程:

客户端发起ssh请求,服务器会把自己的公钥发送给用户
用户会根据服务器发来的公钥对密码进行加密
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

1.1、如果通过ssh命令第一次登录对方主机,系统会出现下面的提示:
客户端是debian9.5系统
=====================================================================================
laopi@debian:~$ ssh root@192.168.1.82
The authenticity of host '192.168.1.82 (192.168.1.82)' can't be established.
RSA key fingerprint is SHA256:x+yJlwiVM1tzFvSmHFMwiWX7s6Jhf8CZE37pq6/FHrw.
Are you sure you want to continue connecting (yes/no)?
=====================================================================================
客户端是CentOS5.9系统
=====================================================================================
[root@CentOS ssh]# ssh root@192.168.1.82
The authenticity of host '192.168.1.82 (192.168.1.82)' can't be established.
RSA key fingerprint is ea:a6:60:d4:51:c3:44:fc:7b:9c:6e:4b:1b:6f:5b:89.
Are you sure you want to continue connecting (yes/no)?
=====================================================================================

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长,这里采用RSA算法,长达2048位,很难比对,所以debian9.5系统采用的是SHA256算法对其进行计算,将它变成一个256位的指纹。
上例中是x+yJlwiVM1tzFvSmHFMwiWX7s6Jhf8CZE37pq6/FHrw。而CentOS5.9系统是对其进行MD5计算,将它变成一个128位的指纹。上例中是ea:a6:60:d4:51:c3:44:fc:7b:9c:6e:4b:1b:6f:5b:89,通过指纹进行比较,就容易多了。很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?
我们可以事先在远程的服务器上通过下面的命令:
# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
查看一下公钥的指纹是啥,然后记录下来,当客户端这里首次连接的时候就可以进行比对,就可以确定要登录的主机是不是自己想登录的。

1.2、这里还需要说明下,debian9.5等系统所用的是新版本的 ssh-keygen -lf 缺省输出的是 sha256 格式的指纹,如果想看 md5 的输出需要加上 -E md5命令格式为:
================================================================
# ssh-keygen -E md5 -lf /etc/ssh/ssh_host_rsa_key.pub
=================================================================

上面生成的密钥对都是通过RSA算法生成的,有的发行版也许算法不是 RSA ,而是 DSA或ECDSA 之类的,寻找对应公钥文件的时候需要注意一下,又有一个问题
系统默认的密钥对在哪里,又是那些文件?默认情况下密钥对都在/etc/ssh/目录下,包括不同算法的公钥,私钥,后面会对/etc/ssh/目录下的文件进行进一步说明。

当我们决定接受这个远程主机的公钥的时候输入yes回车:
==============================================================================
laopi@debian:~$ ssh root@192.168.1.82
The authenticity of host '192.168.1.82 (192.168.1.82)' can't be established.
RSA key fingerprint is SHA256:x+yJlwiVM1tzFvSmHFMwiWX7s6Jhf8CZE37pq6/FHrw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.82' (RSA) to the list of known hosts.
root@192.168.1.82's password:
===============================================================================
上面出现的一句提示,表示host主机已经得到认可,然后,会要求输入密码。如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在用户主目录下的.ssh目录中的known_hosts文件中(~/.ssh/known_hosts)。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。每个SSH用户都有自己的known_hosts文件。此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

1.3、known_hosts可以保存多个公钥文件,每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts文件中,通过下面的方法查看:
==============================================================================================
laopi@debian:/.ssh$ ssh-keygen -E md5 -lf known_hosts
2048 MD5:ea:a6:60:d4:51:c3:44:fc:7b:9c:6e:4b:1b:6f:5b:89 192.168.1.82 (RSA)
256 MD5:64:d6:56:fa:48:78:2c:27:2c:a4:27:9c:70:31:13:98 192.168.1.80 (ECDSA)
==============================================================================================
通过上面的方法可以查看每个公钥的指纹,并且可以知道每个公钥的加密方式,上面两个公钥分别是通过RSA 2048位加密和ECDSA 256位加密。
===============================================================================================
laopi@debian:
/.ssh$ cat known_hosts
192.168.1.82 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA159Qo8XpaqG6WAC7r33wIInBCGWeux/Bun7LYu28U/Vt2CrSSbqoakTUBdS7Gsn8Kj9ZQ55qW/dSwkBMthTaAd3W5X+jtLKymjfSWTLxzlBaX52q64YHop/mA2o88KgVZt/aNOS3iMrD5PI2xXcnUSms2CK6Ps1rWR83QEWorqrY3A/SRWNU0mwNAMOXX55KBQjS06kdbpmnv5csIBxODJi0C5hjfCuWxfXyibZlra4VXW4JAI4Fxo+v9nYK2DWd6bfGS3FRYPuoy0hzAI1WqmzSb+3M4RF81JjZOMZT0yT5BR1RlwX9+32WerO9v2T2PceYdBGY3dtxMLvwouLz7Q==
192.168.1.80 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBATw5wuZnAwuiX6XrwcHcgHnrha9xPqt739GKTl5cSjkn4mxr7STy4bimus/Wd7lOcEZ1C0SlzmZOINQ3TtICuQ=
laopi@debian:~/.ssh$
================================================================================================
通过上面的方法是直接查看known_hosts文件的内容,可以看到两个主机的IP地址和公钥密文。

如果远程的服务器重新安装系统,或其他原因使公钥消失,而管理机器的笔记本公钥信息还在,公钥不同,连接就会出现错误。

问题处理的方法:
方法一:
直接删除known_hosts文件
rm -rf ~/.ssh/known_hosts

优点:干净利索
缺点:把其他正确的公钥信息也删除,下次链接要全部重新经过认证
方法二:
在文件中直接删除对应ip的相关rsa公钥信息或其他公钥信息。
vi ~/.ssh/known_hosts

优点:其他正确的公钥信息保留
缺点:还要vi,还要找到对应信息,稍微优点繁琐
方法三:
通过命令删除对应ip的相关rsa公钥信息或其他公钥信息。
ssh-keygen -R 192.168.0.100

优点:快、稳、狠
缺点:没有缺点

1.4、当通过ssh命令登录的时候,如果指纹不是md5的形式而是SHA256的怎么对比,理论应该有两个方法,第一种是在服务器上查看公钥的SHA265的指纹是多少,这种方式两边得到的指纹不一样,不成功不知道为什么,第二种方法是在当我们通过ssh命令登录的时候,决定接受这个远程主机的公钥输入yes回车,回车后不要输入密码登录,而是按Ctrl+C组合键中止会话,这时候也会生成/.ssh/known_hosts文件,我们可以通过known_hosts文件得到对应的指纹,因为远程服务器的公钥已经保存在这个文件中,命令如下:
==============================================================
laopi@debian:
/.ssh$ ssh-keygen -E md5 -lf known_hosts
==============================================================
通过上面的命令得到的指纹就可以和远程服务器的公钥指纹进行比较了。

1.5、ssh命令最基本的用法

SSH主要用于远程登录。假定你要以用户名user,登录远程主机192.168.0.100,只要一条简单命令就可以了。

laopi@debian:$ ssh user@192.168.0.100

laopi@debian:
$ ssh -l user 192.168.0.100

如果本地用户名与远程用户名一致,登录时可以省略用户名。

laopi@debian:~$ ssh 192.168.0.100

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

laopi@debian:~$ ssh -p 2222 user@192.168.0.100

laopi@debian:~$ ssh -p 2222 -l user 192.168.0.100

2、中间人攻击

SSH之所以能够保证安全,原因在于它采用了公钥加密。在重复下密码登录的方式(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的”中间人攻击”(Man-in-the-middle attack)。SSH协议是如何应对的呢?就是通过基于密钥的登录方式登录。

3、基于密钥的登录方式:

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

大致流程:

首先在客户端生成一对密钥
并将客户端的公钥ssh-copy-id拷贝到服务器端
当客户端再次发送一个连接请求,包括ip、用户名
服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,服务器就会发出“质询”(challenge)表现为一串随机字符,如:abcd。
服务端将使用客户端拷贝过来的公钥对“质询”进行加密,然后发送给客户端
得到服务端发来“质询”后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

两种登录认证的对比:

基于密钥的认证方式,用户必须指定自己密钥的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程会比基于passwd认证稍长,可能需要10秒

四、OpenSSH配置文件
OpenSSH常用配置文件有两个/etc/ssh/ssh_config 和 /etc/ssh/sshd_config
ssh_config 为客户端配置文件,sshd_config 为服务端配置文件,此外/etc/ssh/目录中还有一些其他文件,对这些文件进行下说明:

moduli                        # 配置用于构建安全传输层 所必须的密钥组
ssh_host_ecdsa_key            #SSH2版本所使用的ecdsa私钥
ssh_host_ecdsa_key.pub        #SSH2版本所使用的ecdsa公钥
ssh_host_ed25519_key          #SSH2版本所使用的ed25519私钥
ssh_host_ed25519_key.pub      #SSH2版本所使用的ed25519公钥
ssh_host_rsa_key              #SSH2版本所使用的RSA私钥
ssh_host_rsa_key.pub          #SSH2版本所使用的RSA公钥

1、SSH客户端配置文件

/etc/ssh/ssh——config

配置文件概要
ssh 按以下顺序从以下源获取配置数据:
1、命令行选项
2、用户的配置文件(〜/.ssh/config)
3、系统范围的配置文件(/etc/ssh/ssh_config)
对于每个参数,将使用第一个获得的值。配置文件包含按Host 规范分隔的部分,该部分仅适用于与规范中给出的模式之一匹配的主机。匹配的主机名通常是命令行中给出的主机名。
由于使用了每个参数的第一个获取值,因此应在文件开头附近给出更多特定于主机的声明,并在结尾处给出一般默认值。
该文件包含关 键字和参数,每行一个。、
部分的关键字及其含义如下(请注意,关键字不区分大小写,参数区分大小写):
详细的参数可以查看官方文件说明:https://man.openbsd.org/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                                          #设置连接到远程主机的端口。
    
    Protocol 2,1                             # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了!

    GSSAPIAuthenticationno             #是否允许使用基于GSSAPI 的用户认证.默认值为"yes".仅用于SSH-2

    Cipher blowfish                     #设置加密用的密码。

    EscapeChar ~                      #设置escape字符。
=========================================================================================

2、SSH服务端守护程序配置文件

/etc/ssh/sshd_config

配置文件概要
sshd从/etc/ssh/sshd_config(或-f在命令行中指定的文件)读取配置数据。该文件包含 关键字和参数,每行一个。对于每个关键字,将使用第一个获得的值。以' #'和空行开头的行被解释为注释。参数可以可选地用双引号(“)括起来,以表示包含空格的参数。
可能的关键字及其含义如下(请注意,关键字不区分大小写,参数区分大小写):
详细的参数可以查看官方文件说明:https://man.openbsd.org/sshd_config
==========================================================================================

AddressFamily any
                  指定 sshd 应当使用哪种地址族。取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。 any表示二者均有。
-------------------------------------------------------------
AuthorizedKeysFile  .ssh/authorized_keys
                  指定包含用于用户身份验证的公钥的文件
-------------------------------------------------------------
AllowGroups
             这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups
-------------------------------------------------------------
AllowUsers
            这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符)。默认允许所有用户登录。如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户。如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups
-------------------------------------------------------------
Banner
将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。
-------------------------------------------------------------
Compression yes 
            是否可以使用压缩指令?
-------------------------------------------------------------
ChallengeResponseAuthentication yes
            是否允许质疑-应答(challenge-response)认证。默认值是"yes"。所有 login.conf 中允许的认证方式都被支持。规定的认证方式,均可适用!
-------------------------------------------------------------
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
            强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录shell执行(shell -c)。这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。
-------------------------------------------------------------
HostKey /etc/ssh/ssh_host_key 
         SSH version 1 使用的私钥
-------------------------------------------------------------
HostKey /etc/ssh/ssh_host_rsa_key 
        SSH version 2 使用的 RSA 私钥
-------------------------------------------------------------
HostKey /etc/ssh/ssh_host_dsa_key 
        SSH version 2 使用的 DSA 私钥
-------------------------------------------------------------
HostbasedAuthentication no     
            在开启 HostbasedAuthentication 的情况下, 指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询。 "yes"表示 sshd 信任客户端提供的主机名而不进行反向查询。默认值是"no"。
-------------------------------------------------------------
IgnoreRhosts yes 
             是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值"yes"。
-------------------------------------------------------------
IgnoreUserKnownHosts no 
             是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。默认值是"no"。为了提高安全性,可以设为"yes"。
-------------------------------------------------------------
KeyRegenerationInterval 3600    
             由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,每隔一段时间来重新建立一次!时间为秒!
-------------------------------------------------------------
ListenAddress 0.0.0.0   
             监听的主机适配卡!举个例子来说,如果您有两个 IP,分别是 192.168.0.100 及 192.168.2.20 ,那么只想要开放 192.168.0.100 时, 就可以写如同下面的样式: ListenAddress 192.168.0.100 只监听来自 192.168.0.100 这个IP 的SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH,即:0.0.0.0表示本机的所有地址  
-------------------------------------------------------------
ListenAddress ::  
              指明监听的IPV6的所有地址格式。
-------------------------------------------------------------
LoginGraceTime 600   
              当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,在多久时间内没有成功连上 SSH server ,就断线!时间为秒!
-------------------------------------------------------------
LogLevel INFO   
              指定 sshd 的日志等级(详细程度)   
-------------------------------------------------------------
MaxAuthTries  6  
              指定每个连接最大允许的认证次数。默认值是 6 。 如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。  
-------------------------------------------------------------
Maxsessions  10   
              同一地址的最大连接数,也就是同一个IP地址最大可以保持多少个链接
-------------------------------------------------------------         
MaxStartups  10:30:100    
              同时允许几个尚未登入的联机画面,所谓联机画面就是在你ssh登录的时候,没有输入密码的阶段。
-------------------------------------------------------------
Port 22             
           SSH 预设使用 22 这个 port,您也可以使用多的 port !
-------------------------------------------------------------
Protocol 2,1      
           选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了!
-------------------------------------------------------------   
PidFile /var/run/sshd.pid   
      可以放置 SSHD 这个 PID 的档案!左列为默认值
-------------------------------------------------------------   
PermitRootLogin no  
             是否允许 root 用户直接登录,如果想root直接登录设置为yes,安全方面的考虑最好设置成no
-------------------------------------------------------------
PubkeyAuthentication yes 
             是否允许公钥认证。仅可以用于SSH-2
-------------------------------------------------------------
PasswordAuthentication yes       
          是否允许使用基于密码的认证
-------------------------------------------------------------
PermitEmptyPasswords no  
          上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这项为是否允许密码为空的用户远程登录
-------------------------------------------------------------
PAMAuthenticationViaKbdInt yes     
          是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!
-------------------------------------------------------------
PrintMotd no                
          指定 sshd 是否在每一次交互式登录时打印 /etc/motd 文件的内容。
-------------------------------------------------------------
PrintLastLog yes    
           指定 sshd 是否在每一次交互式登录时打印最后一位用户的登录时间。
-------------------------------------------------------------
RSAAuthentication yes     
           是否使用纯的 RSA 认证!?仅针对 version 1 !
-------------------------------------------------------------   
RhostsAuthentication no     
           本机系统不使用 .rhosts , .rhosts 不安全!
-------------------------------------------------------------
RhostsRSAAuthentication no  
           是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。
这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。 出于安全考虑,建议使用默认值"no"。
-------------------------------------------------------------
Subsystem   
         配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。 值是一个子系统的名字和对应的命令行(含选项和参数)。
-------------------------------------------------------------
ServerKeyBits 1024  
         Server key 的长度!
-------------------------------------------------------------
SyslogFacility AUTH   
         配置sshd发送到syslog所使用的日志类型,当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
-------------------------------------------------------------
SyslogFacility AUTHPRIV     
         默认日志类型为AUTHPRIV
-------------------------------------------------------------
StrictModes yes          
         指定是否要求 sshd在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查。 强烈建议使用默认值"yes"来预防可能出现的低级错误。
-------------------------------------------------------------
UserLogin no                
         在 SSH 底下本来就不接受 login 这个程序的登入!
-------------------------------------------------------------
UsePrivilegeSeparation yes   
          是否让 sshd 通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。认证成功后,将以该认证用户的身份创建另一个子进程。
这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。
-------------------------------------------------------------
UseDNS yes            
          指定 sshd是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应
-------------------------------------------------------------
UseLogin
是否在交互式会话的登录过程中使用 login 。默认值是"no"。如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login不知道如何处理 xauth cookies 。需要注意的是,login 是禁止用于远程执行命令的。如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。
-------------------------------------------------------------
UsePAM yes
      利用 PAM 管理使用者认证有很多好处,可以记录与管理。所以这里我们建议你使用 UsePAM 且 ChallengeResponseAuthentication 设定为 no
-------------------------------------------------------------
X11DisplayOffset
        指定 sshd X11 转发的第一个可用的显示区(display)数字。默认值是 10 。这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。
-------------------------------------------------------------
X11Forwarding
        是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd 代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。如果启用了 UseLogin ,那么X11转发将被自动禁止。
-------------------------------------------------------------
X11UseLocalhost
          sshd 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。这可以防止远程主机连接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工作。为了兼容这些老旧的X11客户端,你可以设为"no"。

===============================================================================
通常只配置上面的加粗字体选项就可以,端口号,是否允许密码登录,是否允许root直接登录。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
ssh的应用和vnc连接桌面
一、什么是ssh?1、SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。SSH之所以能够保证安全,原因在于它采用了公钥加密。2、SSH是传输层和应用层上的安全协议,它只能通过加密连接双方会话
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这