从零开始的云计算生活——第二十天,脚踏实地,SSH与Rsync服务

目录

一.故事背景

二.SSH带外管理

1.概述

[2. 配置文件](#2. 配置文件)

3.命令解析

4.登录方式配置

a.用户名密码登录

b.公钥验证登录

5.实操生成密钥对

三.Rsync+sersync实现数据实时同步

1.rsync概述

2.rsync运行原理

3.rsync部署

4.备份测试

配置备份目录

[5.rsync+sersync 实现数据实时同步](#5.rsync+sersync 实现数据实时同步)

[1 数据同步原理](#1 数据同步原理)

[2 部署rsync+sersync](#2 部署rsync+sersync)

6.脚本编写

7.总结


一.故事背景

网络服务最后的内容,一个是SSH外带管理,一个是Rsync+sersync实现数据实时同步,其中用的最多的是后者,也要写一个相关脚本

二.SSH带外管理

1.概述

ssh服务,一种远程管理连接工具,在CentOS7系统中默认安装并开机自启的。

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能。

监听tcp的22号端口。软件包名称:openssh

配置文件目录:/etc/ssh,sshd_config 服务端配置文件;ssh_config 客户端配置文件。

客户端提供:ssh、scp、sftp命令

服务端提供:sftp服务、ssh服务

2. 配置文件

服务端配置文件: sshd_config

部分内容解析

Port 22 #监听端口

AddressFamily any #ip地址版本

ListenAddress 0.0.0.0 #监听地址,ipv4

ListenAddress :: #监听地址,ipv6

PermitRootLogin yes #是否允许root用户登录

MaxAuthTries 6 #重新连接最大次数

MaxSessions 10 #建立不同用户的会话的最大个数

PubkeyAuthentication yes #是否启用公钥对验证登录

AuthorizedKeysFile .ssh/authorized_keys #存储客户端公钥信息的文件

PasswordAuthentication yes #是否启用密码验证登录

PermitEmptyPasswords no #是否允许空密码登录

UsePAM yes #启用系统用户及密码进行验证登录

UseDNS no #是否启用ssh内部的解析,会影响连接速度

客户端配置文件: ssh_config,设置ssh命令连接的关键配置

Port 22 #设置ssh命令连接的默认端口

3.命令解析

远程登录命令:

ssh [选项] [username@]ssh服务器的监听IP地址或者主机名(使用主机名时,保证客户端能够解析主机名)

-p port 指定连接服务器的监听端口

远程拷贝命令:

scp 本机的文件路径 [username@]ssh服务器的监听IP地址或者主机名:/远程主机存储路径

scp [username@]ssh服务器的监听IP地址或者主机名:/远程主机存储路径 本机的文件路径

sftp服务登录命令:

sftp [选项] [username@]ssh服务器的监听IP地址或者主机名(使用主机名时,保证客户端能够解析主机名)

4.登录方式配置

a.用户名密码登录

默认方式,直接输入登录

b.公钥验证登录

概念 解析
对称加密 双方采用相同的秘钥,安全性较低
非对称加密 双方采用不同的秘钥,安全性较高
公钥 大家都可以知道的秘钥。
私钥 只有自己知道的秘钥。能够证明自己的身份信息

数据加密

使用对端的公钥加密,接收端收到数据后,使用自己的私钥解密。作用是保证数据完整性。

数字签名

私用自己的私钥加密,接收端收到数据后,使用发送端的公钥解密。作用是保证发送者的身份唯一性。

ssh客户端生成密钥对

生成密钥对的命令:

ssh-keygen ,默认是交互式

常用选项:

-t : 指定秘钥算法

-N : 指定秘钥短语

-f : 指定秘钥存储路径

非交互生成密钥对

ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa

#id_rsa: 私钥;id_rsa.pub: 公钥

拷贝公钥命令:ssh-copy-id

5.实操生成密钥对

先创建一个账户阿白,设置密码

生成密钥ssh-keygen,交互式生成,按三次回车

非交互式生成ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa

将密钥复制给其他用户

此时,可以直接使用阿白登录阿绿账户(免密登录)

三.Rsync+sersync实现数据实时同步

1.rsync概述

Rsync(Remote Sync)是Linux系统下的数据镜像备份工具。 该工具可以实现远程同步、不同主机之间的同步,也能实现全量备份增量备份 ,保持数据链接和权限,并采用优化的同步算法,传输前对数据进行压缩 ,故该工具非常适合架构集中式备份异地备份。也支持本地复制或与ssh、rsync同步。

官网地址:https://rsync.samba.org/

优点:

  • scp无法备份大量数据,而rsync备份、统计、比较一起进行。

  • 可以备份整个目录树和文件系统,并保持文件原来的权限、时间、软硬链接。

  • 安装较容易,无需特殊权限。

  • 同步快速,首次同步完全备份,再次同步增量备份。

  • 可以使用scp和ssh等方式传输备份文件

  • 支持匿名传输

  • 选择性保持:符号链接、硬链接、文件属性、权限、时间等

  • 传输速度快:压缩再传输、解压再使用,减少带宽。

备份分类:

  • 完全备份:所有文件进行备份

  • 差异备份:备份自上次完全备份以来所有的修改

  • 增量备份:备份自上次备份依赖所作的修改

2.rsync运行原理

rsync采用C/S模式,即点到点的传输。通过xinetd服务监听873端口,再让xinetd服务下的rsync服务作出响应。

源主机:需要同步数据的服务器

目标主机:存放服务器同步数据的主机

数据同步方式:push 和 pull

  • 推push :主动同步,把数据发送给目标主机。服务器开销大,适合后端服务器较少的情况。【服务器备份推给rsync客户端存放,主动模式】

目的主机配置为 rsync 服务端,源主机周期性的使用 rsync 命令把要同步的目录推过去。

  • 拉pull :所有客户端主机去服务器上面拉数据,导致数据传输缓慢。【rsync客户端去服务器上拉数据,存放到客户端上,被动模式】

源主机配置为 rsync 服务端,目的主机周期性的使用 rsync 命令把要同步的目录拉过来。

3.rsync部署

查看是否监听873端口号

配置文件/etc/rsyncd.conf

参数 作用
-a --archive archive mode权限保存模式【递归、保持属性】
-r 递归处理
-p 保留文件原有属性
-t 保留文件原有时间
-g 保留属组
-o 保留档案所有者
-D 保留device咨询
-l 复制所有的连接
-z 压缩传输
-H 保留硬链接文件
-A 保留文件的ACL属性
-P --progress
---version 输出rsync版本信息
-v 显示输出过程
-u 仅进行更新
---port 指定端口号,默认873
---delete 删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致
---password-file 指定密码文件
---bwlimit 限制I/O带宽
---filter 需要过滤的文件
---exclude 需要过滤的文件
---progress 显示备份过程
--avz 常用:保留权限、显示同步过程、压缩传输

4.备份测试

配置备份目录

  • 服务器:sourcePC 192.168.71.151 (需要进行数据备份的主机)

  • 客户端:targetPC 192.168.71.149 (备份存储的主机)

编写客户端/etc/rsyncd.conf文件,并且创建目录/door/backup

给密码文件加上权限,不然会报错

然后进行跨机备份,输入密码(123456)

成功接收两个文件

此时再创建两个文件后重新备份

此时将会删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致。

若是拉取数据

复制代码
cat /etc/rsync.passwd
123456
chmod 600 /etc/rsync.passwd
rsync -avz /data [email protected]::data --password-file=/etc/rsync.passwd

5.rsync+sersync 实现数据实时同步

1 数据同步原理

1、为什么要是用rsync+sersync

sersync是基于inotify开发的,可以记录目录中发生变化的内容,具体到某个文件或者目录,在使用rsync同步的时候,只同步发生变化的文件或者目录。【增量同步】

2、rsync+inotify-tools 与 rsync+sersync 架构的区别?

①inotify-tools只能记录目录发生了变化,但是不能具体到某个文件或者目录。

②rsync同步不清楚哪些文件或目录发生了变化,就会整个目录都同步,效率低。

3、同步过程:

①源服务器上开启sersync记录指定路径的文件系统变化情况。

②源服务器上使用rsync命令把变化的数据同步到目标服务器上。

③源服务器上配置sersync服务,目标服务器安装rsync服务。

2 部署rsync+sersync

sersync服务端【同步服务器】:192.168.71.151

rsync客户端【存放备份,目标服务器】:192.168.71.149

由于sersync只能监控到差异变化,同步还是需要rsync去做,所以先确保rsync运行正常。可以测试一遍,看能否做完全同步。

修改文件内容为

然后启动服务(因为在当前目录,直接./)

在一边创建文件,一边完成实时监控

6.脚本编写

先在目标主机编写配置脚本

复制代码
#!/bin/bash
systemctl status rsyncd &> /dev/null
if [ $? -ne 0 ];then
systemctl start rsyncd 
fi

read -p "请输入ip地址:" ip
read -p "请输入创建的文件名称:" file
read -p "请输入跨机使用的密码:" passwd
mask=`echo $(echo $ip | cut -d. -f1,2,3).0/24`
echo "port=873
address = $ip
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = $mask
[$file]
path = /$file/backup
comment = bakcup data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd">/etc/rsyncd.conf
touch /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
echo "rsyncuser:$passwd">/etc/rsync.passwd
mkdir -p /$file/backup
echo "Welcome to Backup server">/etc/rsyncd.motd

systemctl restart rsyncd

运行后创建成功

再在源主机编写一个简单的备份脚本

复制代码
#!/bin/bash
systemctl status rsyncd &> /dev/null
if [ $? -ne 0 ];then
systemctl start rsyncd
fi

read -p "请输入要备份的目录:(格式:/目录)" dir
read -p "请输入要备份的目标主机ip:" ip
read -p "请输入目标地址创建的文件名称:" name

read -p  "是否选择最大程度保持一直?(y/n): " choose
if [ "$choose" == "n" ];then
rsync -avz $dir  rsyncuser@$ip::$name
else
rsync -avz --delete  $dir  rsyncuser@$ip::$name
fi

然后输入信息后运行脚本,在目标主机上可以看到备份成功

7.总结

  • rsync可以进行数据的同步,可以使用推和拉两种方式。推即源主机推数据到目标主机,拉即目标主机从源主机上拉数据。

  • push:服务器向客户端推送数据,要在目标主机上配置一个共享目录,在服务端上使用rsync命令推送数据给目标主机。

  • pull:客户端向服务器拉去数据,需要把服务器上的同步目录配置成一个共享目录,然后客户端去这个共享目录上拉去数据。

  • 仅使用rsync同步数据,不会记录数据的变化,每次同步都是同步整个目录,不适合大量数据的同步。

  • 结合使用rsync+sersync,sersync负责监控源主机上同步目录的数据变化,rsync负责同步变化的部分,极大地提高了同步的效率。


伴随本次内容的结束,网络服务也是告一段落,来不及悲伤,即将向我们走来的是!Nginx!