Linux从入门到精通——Linux中sshd服务的管理

e一.sshd服务简介

1.简介

 

SSH 协议:安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。

作用:sshd服务使用SSH协议可以用来进行远程控制, 或在计算机之间传送文件 

      相比较之前用telnet方式来传输文件要安全很多,因为telnet使用明文传输,是加密传输。

SSHD服务安装:

在Redhat Linux 7中系统自带了sshd,如果你的系统没有的话,按下面步骤操作

这里用yum安装 

 1 [root@compy ~]# yum -y install openssh openssh-clients openssh-server openssh-askpass                                    

 ### Openssh-askpass是用于图形界面下输入口令的

2. SSH的工作原理

在讨论SSH的原理和使用前,我们需要分析一个问题:为什么需要SSH?

从上文SSH的定义中可以看出,SSH是一个协议,它和telnet、ftp等协议主要的区别在于安全性。这就引出下一个问题:如何实现数据的安全呢?首先想到的实现方案肯定是对数据进行加密。加密的方式主要有两种:

   (1)对称加密(也称为秘钥加密),例如我们手机上的指纹解锁

   (2)非对称加密(也称公钥加密),例如现实生活中的机械锁

所谓对称加密,指加密和解密使用同一套秘钥。如下图所示:

 

 

 

对称加密的加密强度高,很难破解。但是在实际应用过程中不得不面临一个棘手的问题:如何安全的保存密钥呢?尤其是考虑到数量庞大的Client端,很难保证密钥不被泄露。一旦一个Client端的密钥被窃据,
那么整个系统的安全性也就不复存在。为了解决这个问题,非对称加密应运而生。非对称加密有两个密钥:“公钥”“私钥”。由公钥加密的密文,只有通过对应的私钥才能进行解密,而从公钥上推理出私钥
难度非常之大,几乎不可能。
 

 

(1)远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。

(2)Client使用这个公钥,将密码进行加密。

(3)Client将加密的密码发送给Server端。

(4)远程Server用自己的私钥,解密登录密码,然后验证其合法性若验证结果,给Client相应的响应。

私钥是Server端独有,这就保证了Client的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。

虽然使用这种加密方式大大提高了安全性,但是使用以后就是绝对安全的吗,这显然是不可能的。

上述流程会有一个问题:Client端如何保证接受到的公钥就是目标Server端的?,如果一个攻击者中途拦截Client的登录请求,向其发送自己的公钥,Client端用攻击者的公钥进行数据加密。
攻击者接收到加密信息后再用自己的私钥进行解密,不就窃取了Client的登录信息了吗?这就是所谓的中间人攻击


 

 

 为解决这个问题SSH采用了以下两个方式来保证安全性:
 
(1)基于口令的认证
 
SSH的publish key和private key都是自己生成的,没法公证。只能通过Client端自己对公钥进行确认。通常在第一次登录的时候,系统会出现提示信息来提示用户在系统无法识别主机
真实性的前提下是否进行连接
 
(2)基于公钥的认证

1.Client将自己的公钥存放在Server上,追加在文件authorized_keys中。

2.Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R)
,然后将加密后信息发送给Client。

3.Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。

4.Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。

5.Server端会最后比较Digest1和Digest2是否相同,完成认证过程。



后面会展示具体的操作来让大家感受一下这两种认证方式

 

3.连接方法:

    ssh       username@要连接的主机ip          ##文本模式的连接,没有图形

    ssh    -X     username@要连接的主机ip         ##可以在连接成功后开启图形

    ssh     username@要连接的主机ip   command     ##直接在远程主机执行某条命令

 

注:下面要进行的所有操作将使用两个虚拟机,我将一个设为客户端,命名主机为Client,另一个为服务端,命名主机为Server,用以区分

 

 

 

 

 连接前先查看服务端是否开启sshd服务,现在是开启的

 

 

 服务开启以后看一下服务器的IP地址

 

 

 

成功连接上主机,并且可以看到需要先输入yes才能继续执行,这就是上文提到的基于口令的认证方式,再次连接则不会出现这种提示

 

注意:第一次连接陌生主机时要建立认证文件,所以会询问是否建立,需要输入yes。再次连接此台主机时,因为已经生成~/.ssh/know_hosts文件所以就不需要再次输入yes

4.远程复制:

ssh的一个重要作用就是传输文件,下面演示如何用相关命令传输文件:
    scp file root@ip:dir    ##上传文件
    scp root@ip:file dir    ##下载文件

 

 

从服务端下载了一个bash文件到桌面上

 

 

scp -r 表示递归传送,需要传送目录时要用此命令,目录后加/表示目录和目录里的全部内容,不加/则表示仅目录

 

注意:非本机的所有的文件地址都必须是绝对路径,否则无法识别

 

附:

更改主机名称:hostnamect  set-hostname  要更改的名字(格式为XXX.example.com,也可以直接简写XXX)
更改主机IP:nm connection-editor(后续会有详细介绍,在此只作列举)   
查看主机IP:ifconfig   

 

 

使用命令改变主机名称为abc

 

 

重启shell以后可以看到在行提示符中主机名字已经改为abc

 

 

 

二.sshd的key认证

1.生成认证KEY


ssh-keygen

 1 [root@server0 ~]# ssh-keygen                                                         ##生成公钥私钥工具
 2 Generating public/private rsa key pair.
 3 Enter file in which to save the key (/root/.ssh/id_rsa):[enter]                      ##加密字符保存文件(建议用默认)
 4 Created directory '/root/.ssh'.
 5 Enter passphrase (empty for no passphrase):         [enter]                     ##密钥密码,必须>4个字符
 6 Enter same passphrase again:                 [enter]                               ##确认密码
 7 Your identification has been saved in /root/.ssh/id_rsa.
 8 Your public key has been saved in /root/.ssh/id_rsa.pub.
 9 The key fingerprint is:                        
10 ab:3c:73:2e:c8:0b:75:c8:39:3a:46:a2:22:34:84:81 root@server0.example.com
11 The key's randomart image is:
12 +--[ RSA 2048]----+
13 |o                |
14 |E.               |
15 |..               |
16 |.  . o           |
17 |.o. * . S        |
18 |oo.o o   .       |
19 |+ =. .  .        |
20 |o. oo.+..        |
21 |    ..o*.        |
22 +-----------------+

 

用ls命令查看一下/root/.ssh/,发现有以下内容:


id_rsa                                            ##私钥,相当于钥匙
id_rsa.pub                                    ##公钥,相当于锁

authorized_keys       ##保存已授权的客户端公钥

known_hosts         ##已知的主机,该文件使客户端在第一次登陆以后不再弹出提示信息

 

 

 

ssh-keygen是用于生产密钥的工具。

  • -t:指定生成密钥类型(rsa、dsa、ecdsa等)
  • -P:指定passphrase,用于确保私钥的安全
  • -f:指定存放密钥的文件(公钥文件默认和私钥同目录下,不同的是,存放公钥的文件名需要加上后缀.pub)

2.添加key认证方式


使用的命令为:ssh-copy-id -i /root/.ssh/id_rsa.pub  root@ip


ssh-copy-id                                                                                       ##添加key认证方式的工具
-i                                                                                                       ##指定加密key文件
/root/.ssh/id_rsa.pub                                                                         ##加密key
root                                                                                                   ##加密用户为root
172.25.254.227                                                                                ##被加密主机ip

 

 

 

3.分发钥匙


scp /root/.ssh/id_rsa root@172.25.254.109:/root/.ssh/

 

 

4.测试

在客户主机中
ssh root@172.25.254.200        ##连接时发现直接登陆不需要root密码

 

 

 

可以看到此次登陆并没有要输root的密码

 

 

5.修改文件限定用户IP登陆

除了用分发私钥的方法来限定用户的登陆以外,ssh还有一种方法可以限定用户登陆,就是在服务端通过修改配置文件限定指定的用户IP登陆

vim  /etc/hosts.allow    ##用户白名单,在此名单的用户可以登陆服务端

在注释下方空白中写入,格式为:   sshd:允许的主机IP

vim  /etc/hosts.deny    ##用户黑名单,在此名单的用户无法登服务端(即使你知道服务端主机密码)

在注释下方写空白写入,格式为:   sshd: ALL   

因为系统默认是先读allow后读deny,这样写完之后重启sshd服务,即可只让允许的主机登陆了

 

 

 1 vim /etc/hosts.allow                                                                                            

 

 

  1 vim /etc/hosts.deny                                                                                             

 

 

 

 

实验一下看除了109别人是否能登陆,在此我拿真机做实验

 

 

 

109输入密码是可以登陆的

 

 

真机去连无法登陆,连输入密码的机会都不给,所以说你就算知道密码也没用

 


三.sshd的安全设定

1.openssh-server配置文件
           /etc/ssh/sshd_config
          78 PasswordAuthentication yes|no              ##是否开启用户密码认证,yes为支持no为关闭

          注意:编辑完后一定要重启服务,systemctl restart sshd

        在服务端:


78 PasswordAuthentication yes|n     ##是否允许用户通过登陆系统的密码做sshd的认证

 

 


48 PermitRootLogin yes|no        ##是否允许root用户通过sshd服务的认证

 

 


52 Allowusers student westos        ##设定用户白名单,只有在白名单中的用户才能使用sshd建立连接

 

 

 


53 Denyusers  student              ##设定用户黑名单,在黑名单中的用户无法使用sshd建立连接

 


四.添加sshd登陆的登陆信息
vim  /etc/motd        ##文件内容就是登陆后显示的信息##

 

 



 

 

五.用户的登陆审计


1.用户的查看

  w       ##查看正在使用当前系统的用户##
  w -f    ##查看使用来源##
  w -i    ##显示IP

 

 

 

 

 

vim /var/run/utmp      ##可以在此文件里看到记录

2.查看使用过并已经退出的用户

使用的命令为:last   

 

 

 


vim /var/log/wtmp   ##可以在此文件中查看记录   

3.查看试图登陆但失败的用户

使用的命令为:lastb 

 

 

 



vim /var/log/btmp

vim /var/log/messages      ##可以在这两个文件中查看记录

posted on 2018-07-25 22:43  对方正在输入你的  阅读(324)  评论(0编辑  收藏  举报

导航