1.什么是sshd服务?
客户端主机通过网络在服务端主机中开启服务端主机shell的服务
客户端通过网络连接服务端,并且控制服务端,也就是客户端开启了服务端的shell
ssh (安全外壳协议)
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。
几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
2.搭建实验环境
说明:本实验是在两台虚拟机中做,server主机为服务端,desktop主机为客户端
主机的ip不知道可以采用命令查看 :
在虚拟机的shell中输入 ip addr show eth0 即可查看
在真机的shell中输入 ip addr show br0 即可查看
步骤一:先在真机中打开两个虚拟机 desktop和server
步骤二:配置两台主机的ip ,配置网络在进程管理中已经详细说过,这里就不再赘述
desktop主机的ip为172.25.254.111,该主机用于客户端测试
server主机的ip为172.25.254.211,该主机用于服务端配置
步骤三:在两台主机的shell中分别删除 /root/.ssh/(删除这个目录rm -rf /root/.ssh 或者删除这个目录下的文件rm -rf /root/.ssh/*均可以)
为什么要删除/root/.ssh/?
客户端主机第一次连接服务端主机会在这个目录下生成known_hosts这个文件,为了验证这个实验效果,所以先将这个目录清空或者直接删除这个隐藏目录
直接在家目录下面输入ls -a(查看所有文件,包括非隐藏文件和隐藏文件) 或者l.(只查看隐藏文件)
步骤四:然后改两个主机名字
在客户端主机输入 hostnamectl set-hostname client.westos.com(desktop主机)
在服务端主机输入 hostnamectl set-hostname server.westos.com(server主机)
3.sshd的相关内容
(1)连接方式:(客户端主机连接服务端主机)
文本模式的连接
客户端可以启用服务端的文本模式功能
一台主机可以和另外一台主机连接起来,并且可以操作对方的文本模式
如果是客户端连接服务端,则客户端可以操作服务端的文本模式
如果是服务端连接客户端,则服务端可以操作客户端的文本模式
命令格式为 ssh username@ip
说明:
username为被连接的主机的存在的任意用户,ip是被连接的主机的地址
记住:拿谁家的钥匙开谁家的门
具体操作过程如下:
步骤一:删除之前的认证文件
在客户端主机上输入cd,切换到家目录
ls -a 查看客户端主机文件,如果没有.ssh文件,说明没有连接过远程主机(服务端主机)
ls -ad /root/.ssh 直接查看是否有这个文件,如果显示没有,说明没有连过远程主机
步骤二:用客户端主机连接服务端主机
在客户端主机中输入: ssh root@172.25.254.211(server主机的ip)
注意:
如果是第一次连接的话会问yes或者no-->输入yes
然后让输入密码:server主机的密码
然后exit退出
步骤三:用client主机重新连接server主机: ssh root@172.25.254.211(server主机的ip)
拿谁家的钥匙开谁家的门 ,不一定是root用户 ,只要是目标主机的可用用户即可
注意:
这次会直接输入密码,没有问yes或者no,因为已经连接过一次,有.ssh文件
连接好之后exit退出
步骤四:在客户端主机中查看/root/.ssh/下的文件
cd /root/.ssh/ 切换到该目录下
ls 查看该目录下的文件
出现known_hosts文件
cat known_hosts 查看该文件的内容 会显示server主机的信息
步骤五:然后在客户端主机中输入 rm -rf known_hosts, 删除该文件
再次重新连接 ssh root@172.25.254.211 就会出现yes或者no
步骤六:在客户端打开服务端的文本编辑模式
由此可见客户端可以控制服务端的文本编辑模式了
步骤七:删除刚刚建立的文件
注意:
第一次连接陌生主机的时候需要建立认证文(件~/.ssh/know_hosts文件),所以会询问是否建立,输入yes即可.
再次连接次台主机的时候,由于已经生成~/.ssh/know_hosts文件,因此不需要再次输入yes.
连接成功后并且开启对方的图形编辑模式的连接方式(gedit 、firefox等)
命令格式为: ssh -X username@ip
具体操作过程如下:
步骤一:连接上以后在客户端主机里面输入firefox打开远程主机(服务端)的图形界面
可见在客户端主机直接输入firefox 并不能打开服务端主机的图形界面
步骤二:先退出文本连接模式,然后再在客户端主机当中输入 ssh -X root@172.25.254.211,使客户端可以控制服务端主机的图形界面
步骤三:此时在客户端输入firefox就可以控制服务端的图形编辑模式了
(2)远程复制:(将一台主机的上的文件复制到另外一台主机上)
只需要弄清楚二者的ip地址(谁是谁)就可以,然后使用相关命令就可以实现文件远程复制
要保证上传或者下载的文件是存在的
还有上传和下载的路径要写正确,为了防止文件混乱,统一使用绝对路径
此实验不需要客户端主机控制服务端主机(将之前的连接退出exit),只需要知道对方的ip及存在的帐号和密码就可以进行上传和下载
命令格式:scp file root@ip:dir 上传
将客户端主机上的file文件复制到远程主机的dir (相当于上传文件)
步骤一:在客户端主机的桌面上先建立五个文件 touch file{1…5}
步骤二:在客户端主机中输入 scp /root/Desktop/file{1…5} root@172.25.254.211:/root/Desktop/ ,然后回车
可见将客户端的文件上传到了服务端
命令格式:scp root@ip:file dir 下载
将root ip这台远程主机上的file文件下载到当前主机的dir
重点注意:为了防止错误,所有的路径都采用绝对路径,并且上传或者下载目录的时候加上 -r
步骤一:先将客户端和服务端桌面的所有文件都删掉
步骤二:在服务端的桌面上建立3个文件 touch file{1…3}
步骤三:在客户端主机中输入scp root@172.25.254.211:/root/Desktop/file{1…3} /root/Desktop/ ,然后回车
可见将服务端的文件下载到了客户端
4.sshd服务的免密操作
(1)为什么要进行免密操作?
如果客户端知道服务端主机的ip地址和密码,就可以远程操控服务端
如果任意一个客户端知道服务端主机的ip地址和密码,并且知道它里面的重要文件存放路径
那么就可以拷贝服务端的文件
这样的操作在实际企业当中非常不安全
(2)怎样进行免密操作?
采用钥匙和锁的方式,服务端想让客户端什么时候连就什么时候连
步骤一:在服务端输入:ssh-keygen ,生成钥匙和密码 , id_rsa是钥匙 id_rsa.pub是锁
在服务端输入 ssh-keygen 三次回车 ,每次回车都有原因
第一次回车是钥匙和密码存放路径(可以直接回车,存放在默认路径下)
第二次回车是密码(可以直接回车,不设置密码)
第三次回车也是密码(可以直接回车,不设置密码)
步骤二:在服务端输入:ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.200 先给自己上锁,也就是给服务端上锁
步骤三:在服务端输入:scp /root/.ssh/id_rsa root@172.25.254.111:/root/.ssh/ 将密码传给客户端
客户端/root/.ssh/的这个文件(目录)必须存在 ,相当于上传
注意:如果客户端没有/root/.ssh/这个文件,客户端使用密码方式重新连接一次服务端,会生成该文件,然后可以将锁传给客户端了
步骤四:客户端使用密码方式重新连接一次服务端,会生成该文件,并且退出
步骤五:服务端重新给客户端钥匙,并且查看钥匙是否一致
步骤六:验证客户端是否可以免密连接服务端
由此可见,已经实现了免密连接
5.sshd的安全设定?
(1)为什么要进行安全设定?
因为服务端的root权限太大,客户端如果使用服务端的root权限极不安全
为了保证ssh服务器的安全性:服务端开放的权限不能太多,一般不太让客户端主机用服务端主机的超级用户root
客户端只做测试,所有的设置均在服务端设置
试密码不安全 ,直接设置钥匙和锁的方式
(2)常用的安全设定
/etc/ssh/sshd_config的第78行 是否允许服务端的任意一个存在的用户通过登陆系统的密码做sshd的认证
/etc/ssh/sshd_config的第48行 是否允许服务端的root用户通过sshd的服务
加入AllowUesrs student westos 设定用户的白名单,此名单里面的用户可以做sshd服务 (文件里不存在 直接输入即可 多个用户用空格隔开)
加入DenyUsers westos 设定用户的黑名单,此名单里面的用户不可以做sshd服务
每次改完一个参数重启才会起作用:在服务端systemctl restart sshd.service
验证完一个参数之后改回原来的,这样可以保证实验的准确性
设置服务端里面的哪些用户是否可以做sshd服务或者服务认证
(3)怎样进行安全设定?
步骤一:先关闭那个免密操作,恢复到以前,使两台主机没有连接
步骤二:在服务端 vim /etc/ssh/sshd_config 这个文件
步骤三:验证78行的 PasswordAuthentication yes|no (是否允许试密码登录)
是否允许服务端的任意一个存在的用户通过登陆系统的密码做sshd的认证(最初始的那种远程连接输入密码的方式)
是否可以使别人在登陆时没有钥匙时试密码登陆 ,yes表示可以试密码和no表示不可以试密码, 注释相当于no
先在客户端新建立一个leo用户
然后在/etc/ssh/sshd_config 这个文件里面设置存在的任意一个用户不能试密码登陆
重启服务
然后在客户端使用leo身份连接服务端,可以看到客户端不能试密码连接客户端
no改为yes,再次重启连接就可以
注意:验证完之后改为最初始的yes
步骤四:验证48行的 PermitRootLogin yes|no
是否允许服务端的root用户通过sshd的服务(客户端是否能通过服务端的root用户远程连接服务端)
禁止超级用户登陆 ,限制超级用户使用root身份来登陆ssh,默认为yes
注意:之前我们已经设置过超级用户可以免密连接
因此做这个实验之前应该先取消root的免密操作
在客户端和服务端均删除钥匙也就是 rm -rf /root/.ssh/*
不允许的话会一直显示密码错误
在服务端 vim /etc/ssh/sshd_config 这个文件,将在48限制root用户的试密码登陆
默认是yes并且被注释
去掉注释就是允许root免密码登陆
去掉注释并且改为no才可以限制root试密码登陆
看root用户是否能够试密码登陆,no理论上是不可以(可以试密码,但是输入正确的密码也会报错)
步骤五:在/etc/ssh/sshd_config 这个文件里面的任意一行写入AllowUsers tom westos
设定用户的白名单,此名单里面的用户可以做sshd服务 (服务端不存在用户直接输入即可生成(这个观点错误), 多个用户用空格隔开)
如果写入服务端本身不存在的用户,那么当客户端连接服务端的时候需要密码就不知道是什么
因此必须先在客户端建立实验用户并且设置实验用户的密码,这样在客户端连接的时候才能看到实验效果
先在服务端里面建立两个用户 tom(密码设为tom) 和westos(密码设为westos)
在服务端中打开/etc/ssh/sshd_config 这个文件,并且设置白名单
重启服务
验证tom用户和westos用户是否可以试密码登陆
取消白名单
步骤六:在/etc/ssh/sshd_config 这个文件里面的任意一行写入DenyUsers tom westos(可以同时写入多个用户,批量进行)
设定用户的黑名单,此名单里面的用户不可以做sshd服务 (多个用户用空格隔开,这个用户必须是服务端存在的,没有的话先建立再写入文件)
在服务端打开/etc/ssh/sshd_config 这个文件并且设置黑名单
重启服务,修改才会生效
验证黑名单中的用户不可以登陆(可以试密码登录,即使输入的密码是正确的,也会报错)
6…添加sshd登陆信息
(1)为什么要添加sshd登陆信息?
为了使客户端在连接服务端的时候可以直观的看到服务端的相关信息,因此要添加信息
也就是使客户端登陆服务端的时候显示服务端的一些信息
(2)怎样添加sshd登陆信息?
在服务端的 /etc/motd 文件里面设置服务端自己的一些信息
vim /etc/motd 文件内容就是登陆后显示的信息
步骤一:在服务端vim /etc/motd编辑该文件,添加信息(不需要重启服务,写了就会生效)
步骤二:客户端连接服务端,显示登陆信息
7.用户的登陆审计
(1)什么叫用户的登陆审计?
在服务端里面查看使用服务端的客户端的相关信息
(2)怎样进行登陆审计?
在服务端直接输入命令即可
(3)常用的登陆审计的命令:
w | 查看正在使用当前系统的用户 |
---|---|
last | 查看使用过并且退出的用户信息 |
lastb | 试图登陆但没成功的用户 |
(4)实验过程如下:
== w 查看正在使用当前系统的用户==
w -f 查看使用的客户端来源,显示主机名等信息
w -i 显示连接我的主机的ip
lastb 试图登陆但没成功的用户