详解sshd服务
1.sshd的简介
SSH为Secure Shell 的缩写,指应用层的安全协议。SSH是目前较可靠,专为远程登陆会话和其他网络服务提供安全性的协议。使用SSH协议可以有效防止远程登陆过程中的信息泄露问题。
连接方式:
ssh username@ip ##文本模式的连接
ssh -X username@ip ##可以在连接成功后开机图形
注意:
第一次连接陌生主机时需要建立认证文件
所以会询问是否建立,需要输入yes,退出时 ctrl+d/exit
再次连接此台主机时,因为已经生成~/.ssh/know_hosts文件所以不需要再次输入yes
远程服务:
scp file root@ip:dir ##上传
scp root@ip:file dir ##下载
为了测试上述命令,我们首先需要作下面工作:
1)(真机中操作)打开虚拟机【desktop】和【server】
rht-vmctl start desktop
rht-vmctl view desktop
rht-vmctl start server
rht-vmctl view server
2)为了区别这两台主机,我们用以下命令修改两台主机名称:
hostnamectl set-name client_ssh.westos.com
hostnamectl set-name server_ssh.westos.com
修改后需要重启shell才能生效。当然主机名不唯一,可按自己想法来。
3)对两台主机进行网络配置。
修改client_ssh主机的ip为172.25.254.106
修改server_ssh主机的ip为172.25.254.206
【此处的IP也不唯一,可自行修改,方便区分就好】
读者若对此操作不熟悉,具体修改方式可以参照作者前面的博客【如何再Linux中运用vim命令轻松编辑文件】,在这篇文章的开头讲述了虚拟机的网络配置方式。
上面的操作完成后,我们便会的得到以下两台主机:
4)检测网络配置是否成功
首先可以用命令【ifconfig】,查看ip是否修改成功
其次用命令【ping ip】检测两台主机网络是否连通。例:我们在主机client_ssh(后面下文中的操作如不做声明,都默认在client_ssh中,将server_ssh作为客户端)进行测试。
ping 172.25.254.206
下图为测试成功!【退出——ctrl+c】
5)我们将主机(client_ssh)上的文件file上传到客户端(server_ssh)的/mnt目录中
(1)我们在主机建立如下文件
为了排除其他因素影响实验,我们要查看客户端的/mnt目录
(2)下面开始上传文件
scp root@172.25.254.206:/mnt/
查看客户端是否接收成功:
补充说明:
由上述的简单介绍我们可知,当对方知道你的主机密码时便可以轻松完成连接,这种情况对于企业来说是不允许存在的,因此我们可以通过下面的方式来消除这种隐患
【修改权限列表,实现禁止或允许指定用户进行连接】
/etc/hosts.deny
/etc/hosts.allow
简单作出演示:
下面的设定表示:禁止所有用户远程连接本机
下面的设定表示: 允许其他用户远程连接,IP为172.25.254.250的主机被禁止
注意:
修改完毕后一定记着重新加载配置文件,修改才能生效
systemctl reload sshd.service
2.sshd的key认证
上面已经提到过,当我们第一次用主机连接客户端时,需要建立认证文件,输入【yes】后建立,键入密码即可完成远程连接。这是系统默认的认证方式。
接下来,给大家将要为大家介绍怎样自行设定认证方式:
实验目的:自行设定目标主机的认证方式,然后用另一台主机实现远程连接(我们将server_ssh作为目标主机,最终实现用client_ssh远程连接目标主机)
1)首先删除目标主机/root/.ssh文件
rm -rf /root/.ssh
2)查看是否能ping通
3)生成密钥
ssh-keygen
ssh-keygen -f /root/.ssh/id_rsa -N “” ##两种方式目的相同
4)给用户添加新的认证方式,也就是给目标主机上锁(在目标主机的操作)
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.206(目标主机的IP)
出现下图中的信息时,便添加成功
5)取消默认认证方式(仍然在目标主机上操作)
修改下面的文件
vim /etc/ssh/sshd_config 【文件78行,将yes改为no】
注意:
修改完毕后一定记着重新加载配置文件,修改才能生效
systemctl reload sshd.service
6)远程复制:目标机将密钥给主机【client_ssh】(在目标主机中操作)
scp /root/.ssh/id_rsa root172.25.254.106:/root/.ssh
在主机【client_ssh】中查看是否收到(事先将目录/.ssh中的文件清空):
7)测试,假如实验成功,会发现在连接目标主机时不需要密码(在主机【client_ssh】中操作)
ssh root@172.25.254.206
从下图中可以看出我们在远程连接目标主机时,只用输入【yes】建立认证文件,不需要密码
3.sshd的安全设定
修改文件**/etc/ssh/sshd_config**
vim /etc/ssh/sshd_config
修改的命令行 | 修改后的效果 |
---|---|
78行 PasswordAuthentication yes / no | 是否允许用户通过系登陆的密码做sshd的认证 |
48行 PermitRootLogin yes / no | 是否允许root用户通过sshd服务的认证 |
52行 Allowusers student westos | 设定白名单,白名单出现默认不在名单中的用户不能使用sshd |
53行 Denyusers westos | 设定黑名单,黑名单出现默认不在名单中的用户可以使用sshd |
注意:
每一次修改文件后都要重新加载配置文件
systemctl reload sshd.service
示例:
1)
修改文件78行,改为【no】,修改后正常情况下用户无法登陆目标机
用主机远程连接
2)白名单设定
首先我们需要在目标主机建立两个用户以方便测试【westos】和【student】
(在下面实验开始之前我们需要把上一个实验中修改的内容还原,否则无论怎么做,目标主机会拒绝一切试图远程连接它的主机)
第一步:按上述命令介绍修改文件【/etc/ssh/sshd_config】如下
我们将白名单内容设定为:本机中只允许用户【student】可以使用sshd服务(这句话很重要)。也就是说,没有出现在白名单中的用户不能被其他主机连接。
修改完毕后,使用命令重新加载sshd服务的配置文件。
systemctl reload sshd.service
第二步:我们使用另一台主机进行远程登陆。
测试一:使用【server_ssh】主机的超级用户身份登陆,由下图可知,正确输入三次密码后仍然没有连接成功,证明登陆被拒绝
测试二使用【server_ssh】主机的westos身份登陆,由下图可知,正确输入三次密码后仍然没有连接成功,证明登陆被拒绝
测试三:使用【server_ssh】主机的student身份登陆,由下图可知,正确输入密码后登陆成功。
4.添加sshd登陆信息
vim /etc/motd
文件内容就是登陆后显示的信息
示例:我们修改目标机的文件内容,用主机登陆后查看是否显示了文件内的信息
1)添加下面的内容
2)连接目标机
5.用户的登陆审计
命令 | 功能 |
---|---|
w | 查看正在使用当前系统的用户 |
w -f | 查看使用来源 |
w -i | 显示IP |
last | 查看使用过并退出的用户信息 |
lastb | 试图登陆但没成功的用户 |
示例: