文章目录
-
目录
文章目录
前言
一.安装时间服务器软件
初始化系统
二.配置时间服务器的服务端
三.配置时间服务器的客户端
四.远程连接服务器
前言
Linux中的时间服务器是指NTP服务器,NTP是Network Time Protocol的缩写,即网络时间协议。NTP服务器可以提供精确的时间信息,从而使得网络上的所有设备都能够同步时间,确保整个网络的时间一致性。
一.安装时间服务器软件
-
初始化系统
#在文件/etc/yum.repos.d/中新建一个以.repos 结尾的文件
[root@timeserver ~]# cd /etc/yum.repos.d/
[root@timeserver yum.repos.d]# vim /etc/yum.repos.d/wangluo.repo
#写入如下内容
[wangluo-app]
name=wanluo-app
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
gpgcheck=0
[wangluo-base]
name=wangluo-base
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
gpgcheck=0
#安装软件包
[root@timeserver yum.repos.d]# yum install vim bash-completion -y
出现完毕字样代表成功安装
二.配置时间服务器的服务端
#将服务设置为开机自启
[root@localhost ~]# systemctl enable --now firewalld
#编辑/etc/chrony.conf文件
[root@timeserver yum.repos.d]# vim /etc/chrony.conf
- 找到如下配置 ,设置一个时间服务器服务端
- 如下图红框部分将服务端设置为阿里云和腾讯云
- #开头代表该行为注释行
#配置完成后重启生效
[root@localhost ~]# systemctl restart chronyd
- 如何查看配置是否生效?
#将当前时间改为18:00
[root@timeserver yum.repos.d]# date -s '18:00'
2023年 09月 21日 星期四 18:00:00 CST
#启动时间服务器校验正确时间
[root@timeserver yum.repos.d]# chronyc sources
等待后时间同步,由上图可知:
时间服务器 IP地址:203.107.6.88
?代表时间服务器无法访问 * 代表可正常访问
- 拓展配置
#将chronyc sources 指令的输出重定向 到黑洞文件 删除该命令的输出
[root@timeserver yum.repos.d] chronyc sources > /etc/null
#修改主机名
[root@timeserver yum.repos.d]# hostnamectl hostname timeserver(修改的名字)
- 设置允许访问的网段
[root@timeserver ~]# vim /etc/chrony.conf
三.配置时间服务器的客户端
- 初始化系统
#编辑/etc/chrony.conf文件
[root@timeserver yum.repos.d]# vim /etc/chrony.conf
- 关闭时间服务器防火墙
[root@timeserver ~]# systemctl disable --now firewalld
四.远程连接服务器
- 概述
远程连接服务器是一种通过互联网或局域网连接到远程计算机的技术,使用户能够使用远程计算机上的资源和应用程序。通过远程连接,用户可以在任何地点远程访问服务器上的数据、文件和应用程序,就好像他们坐在服务器旁边一样。远程连接服务器可以提高工作效率和灵活性,也可以帮助用户更好地管理远程设备。常用的远程连接方式包括远程桌面连接、SSH、Telnet等。
- 远程连接服务器可配置文件
主机作为被连接方 | 可以更改 ssd_config 文件 |
主机作为连接方 | 可以更改 ssh_config |
- 查看ssd_config,配置服务器的访问端口号
#Port 22 代表服务器监听的端口为 22号
按注释行的格式将端口号改为 2222 号
端口号设置完毕之后,重新系统后,为什么会报错 ?
Linux 系统的存在强制访问控制机制SELinux ,它可以实现对操作系统的安全控制。但是在某些情况下,可能会出现一些问题,例如某些应用程序无法运行或者权限不足等。在这种情况下,可以使用 setenforce 0 命令关闭 SELinux,以解决这些问题。关闭 SELinux 可能会降低系统的安全性,因此应该谨慎使用。
setenforce 0 每次开机都需要配置,如需永久生效 则需要更改配置文件/etc/selinux/config
将SELINUX==enforcing 改为 ==permissive
- 关闭强制访问机制
[root@timeserver ~]vim /etc/selinux/config
将SELINUX==enforcing 改为 ==permissive
- 远程登录客户端需要关闭客户端防火墙
[root@timeserver ~]systemctl disable --now firewalled
- 远程登录命令
[root@timeserver ~]ssh root@+(客户端IP地址) -p(指定端口号) 2222
- 拓展配置
#拒绝root用户登录
[root@timeserver yum.repos.d]# vim /etc/ssh/sshd_config.d/01-permitrootlogin.conf
#将PermitRootLogin yes 改为 PermitRootLogin no
#允许特定用户ssh等罗,其它都无法登录
[root@timeserver yum.repos.d]vim /etc/ssh/sshd_config
#在末尾添加一条指令:allow users+(指定用用户名)
五.连接加密技术
密钥的分类
对称密钥:
对称密钥也称为共享密钥,是一种加密方式,简单的说就是加密密钥和解密密钥相同。
非对称密钥:
非对称密钥也叫公私钥加密,它是一种在信息传输过程中对传输内容进行加密和解密的方法。非对称密钥有两个密钥,一个是公钥,一个是私钥。公钥是公开给所有人的,任何人都可以使用公钥对信息进行加密,但只有拥有私钥的人才能解密。简单的说就是加密密钥和解密密钥不同。
SSH工作过程:
在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段:
(1)版本协商阶段
- 服务器端打开端口22,等待客户端连接;
- 客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。
- 客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。
- 客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。
- 说明:上述报文都是采用明文方式传输。
(2)密钥和算法协商阶段
- 服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。
- 服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。
- 服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥(对称密钥)和会话ID。
- 由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。
会话密钥的生成:
-
客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动找/etc/ssh/ssh_host*文件, 若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。)
-
删除 host 文件之后,客户端和服务端建立连接是确认机制否是会生成这个文件,将公钥记录进去?
-
服务器生成会话ID,并将会话ID发给客户端。
-
若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器。
-
服务器用自己的私钥将收到的数据解密,获得会话密钥。
-
服务器和客户端都知道了会话密钥,以后的传输都将被会话密钥加密
(3)认证阶段
SSH提供两种认证方法:
- 基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。
- 基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥(这个公钥是哪里来的)进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。
- 注:服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止。
实验:linux客户端通过秘钥登录linux服务端root用户
- 客户端生成一对公私钥
[root@timeserver ~]ssh-keygen
#不进行任何操作,直接回车
- 将公钥发送给服务端
#查看公钥文件
[root@timeserver ~]ll /root/.ssh/
#将公钥发送给服务端
[root@timeserver ~]ssh-copy-id root@192.168.186.130(服务端 IP)