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)非对称加密(也称公钥加密),例如现实生活中的机械锁
所谓对称加密,指加密和解密使用同一套秘钥。如下图所示:
![](https://images2018.cnblogs.com/blog/1444399/201807/1444399-20180727205706288-1681312639.png)
![](https://images2018.cnblogs.com/blog/1444399/201807/1444399-20180727205747865-637139899.png)
![](https://images2018.cnblogs.com/blog/1444399/201807/1444399-20180727210505763-2064419173.png)
(1)远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
(2)Client使用这个公钥,将密码进行加密。
(3)Client将加密的密码发送给Server端。
(4)远程Server用自己的私钥,解密登录密码,然后验证其合法性若验证结果,给Client相应的响应。
私钥是Server端独有,这就保证了Client的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。
虽然使用这种加密方式大大提高了安全性,但是使用以后就是绝对安全的吗,这显然是不可能的。
![](https://images2018.cnblogs.com/blog/1444399/201807/1444399-20180727213801548-1214560222.png)
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 ##可以在这两个文件中查看记录