目录
Linux下的SSH服务
SSH服务简介和原理
SSH结构
SSH服务附带的SCP命令
使用ssh服务
ssh基本用法
ssh服务的两种认证类型
基于口令认证
基于密钥认证
ssh服务常见配置
1.修改ssh端口
2.禁止root用户登录
3.限制ssh监听的IP
4.禁止使用密码登录
Rsync远程同步备份工具
Rsync工作原理
Rsync安装与启动
Rsync的两种认证方式
1、Rsync --daemon认证
2、ssh认证
两者的区别
Rsync命令参数
Rsync基于SSH认证的使用
rsync类似与cp命令
rsync类似与scp命令
rsync类似与rm命令
rsync类似与ls 命令
rsync基于rsync-daemon认证
服务端的配置
客户端配置
rsync的完全备份和增量备份
rsync+inotify
内核参数
事件
操作
rsync+inotify实践
Linux下的SSH服务
SSH服务简介和原理
SSH协议中文名叫远程登录协议,是一种远程终端连接工具,可以通过客户端连接到服务端,从而远程控制电脑或服务器。默认端口为22号端口,基于TCP协议
SSH协议的优点就是数据传输是加密的,并且在传输时数据是压缩传输。既保障了数据的安全性,又大大提高了数据传输速率。
登陆原理
SSH结构
SSH由服务端 (openssh) 和客户端 (常见为ssh) 组成。
SSH的服务端为守护进程 (daemon),它在后台进行并且相应来自客户端的连接请求。服务端的进程名为sshd,负责实时监听和控制远端的连接请求。一般包括公共密钥认证,密钥交换,对称密钥加密和非安全连 接等。
SSH客户端包含 ssh 和 scp (远程拷贝),slogin (远程登录),sftp (ftp的文件传输)等应用程序
SSH服务附带的SCP命令
scp命令是用于远程拷贝文件或目录的命令
格式:scp [参数] 文件 用户@IP地址:目标目录
scp参数:
-r 复制目录
-p 复制目录时保留属性
-P 接端口,默认22号端口
-l 限制速度
scp可以将文件或目录推送至目标主机;也可以从目标主机拉取文件到本机。举例说明,
现在我使用的主机为192.168.75.130,目标主机为192.168.75.137;
推:scp -r -p /home/monkey.txt 192.168.75.137:/home
#将130的主机的monkey.txt文件推送到137的主机的/home下
拉: scp -p 192.168.75.137:/home/cpu.sh ./
#将137的cpu.sh文件拉到130的当前位置下
使用ssh服务
1.检查是否安装ssh服务:rpm -qa | grep openssh 。显示有结果则安装了ssh服务,执行第3步
2.安装ssh服务:yum install openssh -y
3.查看ssh服务状态,并启动:查看:systemctl status sshd; 启动:systemctl start sshd
ssh基本用法
ssh -p user@host
-p 指定端口
user 登陆的用户名
host 登陆的主机地址
默认端口为22号端口;如果用当前登录用户连接,或本地正在使用的用户名与远程登陆的用户名一致时,登录名可以省略
ssh服务的两种认证类型
基于口令认证
基于口令认证,也就是我们现在使用的,但是前提是要知道服务端的账号和密码。通过ssh加密实现远程登录。
基于密钥认证
大致流程是这样的
- SSH客户端以root用户身份创建密钥对
- 服务端将公钥信息导入用户root的公钥数据库文件
- 客户端以root用户身份连接服务器端root用户测试
ssh服务常见配置
ssh服务的配置文件为 /etc/ssh/sshd-config
1.修改ssh端口
ssh服务默认端口为22号端口,我们把默认端口设置为任意其他端口(注意:修改的都那口,不能被占用,以免无法启动)。
修改完成后,重启sshd服务
systemctl restart sshd
这时候,再次使用xshell或mobaxterm打开窗口连接虚拟机时,会发现无法连接。
2.禁止root用户登录
将第二行的内容注释去掉后,将yes修改为no,然后重启ssh服务,会发现使用root用户登录系统时,系统发出 Access denied(拒绝访问)的回复。
3.限制ssh监听的IP
此方式适用于多个虚拟网卡的设备,可以避免多个主机连接服务器,从而减少主机数据损坏的风险。
首先我创建了一个新的虚拟网卡,IP为192.168.75.170 。让后将这个IP添加到文件中
接着,重启服务 systemctl restart sshd
验证
4.禁止使用密码登录
此方式主要是为了提高安全性,禁止密码登录的形势下,只能通过密钥登录。因此我们在设置之后就不能通过密码进行登录,只有设置了密钥才能登录成功。
Rsync远程同步备份工具
Rsync使用的端口号是873端口。
Rsync服务优点如下:
1.备份属于增量备份,只传输修改过的文件。
2.在文件传输前和文件传输后,会对传输的文件进行压缩,从而可以减少传输带宽,降低传输时间。
3.可以对整个目录树和文件系统进行备份,可以选择性的备份软硬链接、时间、文件属性等等内容。
Rsync工作原理
1、客户端构造FileList,FileList包含了需要与服务器同步的所有文件信息对name- >id(id用来唯一表示文件例如MD5)
2、客户端将FileList发送到服务器。
3、服务器上rsync处理客户端发过来的FileList,构建新的NewFileList。 其中根据 MD5值比较,删除服务器上已经存在的文件信息对,只保留服务器上不存在或变化 的文件。
4、客户端得到服务器发送过来的NewFileList,然后把NewFileList中的文件重新传 输到服务器
Rsync安装与启动
安装命令如下
yum install -y rsync
启动后,使用netstat命令查看端口是否打开
rsync --daemon
[root@group7 ~]# netstat -nlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::873 :::* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::33060 :::* LISTEN
Rsync的两种认证方式
1、Rsync --daemon认证
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。 并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。
注意:
rsync-daemon认证方式,需要服务器和客户端都安装rsync服务 并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。
客户端启动不启动rsync服务,都不影响同步的正常进行。
2、ssh认证
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传 输,类似于scp工具。
注意:
ssh认证方式,不需要服务器和客户端配置rsync配置文件 只需要双方都安装rsync服务,并且也不需要双方启动rsync。
# 若rsync服务端SSH为标准端口,此时rsync使用方式如下:
rsync -avz /root/test root@10.10.10.10:/root/
# 若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:
rsync -avz /root/test -e 'ssh -p1234' root@10.10.10.10:/root/
两者的区别
ssh协议认证的数据是通过管道进行传输的,远程连接到主机时,使进程成为 rsync 服务;
而 rsync 认证方式是事先在远程主机上运行 rsync守护进程,使其监听套接字文件,等待客户端的连接。
Rsync命令参数
Rsync基于SSH认证的使用
rsync 默认使用 ssh 协议进行远程登录和数据传输。
只需数据同步双方安装 rsync,但不必启动 rsyncd 服务。
使用 ssh 认证与传输的缺点是不安全:
登录认证使用的账号是远程主机可登录的系统账号,且需要手动输入密码;
同步数据不受目录限制。
rsync类似与cp命令
rsync类似与scp命令
rsync可以实现类似与scp命令一样的隧道传输数据。
rsync推文件:
将本地的文件推送到192.168.75.130
[root@tuxing today]# ls
rfv
[root@tuxing today]# rsync /home/today/rfv 192.168.75.130:/home/new
root@192.168.75.130's password:#在130的主机上查看
[root@group7 new]# ls
[root@group7 new]# ls
rfv
rsync拉文件:
#在192.168.75.134上拆关键文件like,从130主机上将文件拉过来
[root@tuxing home]# touch like
[root@tuxing home]# ls
like lyj new shell today
#从130主机上拉取文件
[root@group7 new]# ls
rfv
[root@group7 new]# rsync 192.168.75.134:/home/like .
root@192.168.75.134's password:
[root@group7 new]# ls
like rfv
rsync类似与rm命令
rm命令是对文件或目录进行删除操作的,rsync也可以做到类似的情况
#rm命令操作
[root@group7 new]# ls
like rfv
[root@group7 new]# rm -rf rfv
[root@group7 new]# ls
like
[root@group7 new]# ls
like
[root@group7 new]# mkdir /null #创建一个空文件夹,通过文件覆盖删除文件
[root@group7 new]# rsync -a --delete /null/ /home/new
[root@group7 new]# ls
rsync类似与ls 命令
[root@tuxing home]# ls -l like
-rw-r--r--. 1 root root 0 11月 27 12:57 like
[root@tuxing home]# rsync like
-rw-r--r-- 0 2022/11/27 12:57:26 like
rsync基于rsync-daemon认证
与 ssh 认证不同,rsync 协议认证不需要依赖远程主机的 sshd 服务,但需要远程主 机开启 rsyncd 服务,本地 rsyncd 服务可不必开启。
需要的配置为:两台centos7的虚拟机
服务端的配置
1.文件配置
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200 #最大连接数
pid file = /var/run/rsyncd.pid #pid文件路径
lock file = /var/run/rsyncd.lock #锁文件路径exclude = lost+found/
transfer logging = yes #记录传输文件日志
timeout = 300 #超时时间
log file = /var/log/rsyncd.log #指定日志文件
log format = %t %a %m %f %b
ignore errors
read only = false
list = falsehosts allow = 192.168.75.0/24 #只允许该网段的网络连接
hosts deny = 0.0.0.0/32 #拒绝该网段连接
auth users = rsync_backup #定义虚拟用户,用来进行连接认证。可替换
secrets file = /etc/rsync.passwd #定义虚拟用户密码文件
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #设置不需要压缩的文件#定义模块信息
[backup]
comment = "backup dir by hello"
path = /backup
2.创建rsync用户
[root@backup ~]# id rsync
id: rsync: No such user
[root@backup ~]# useradd -s /sbin/nologin -M rsync
3.创建数据备份存储目录,并修改属主和属组
[root@backup ~]# mkdir /backup/
[root@backup ~]# chown -R rsync:rsync /backup/
4.创建密码文件,并修改权限
[root@backup ~]#echo "rsync_backup:123456" >> /etc/rsync.passwd
[root@backup ~]#chmod 600 /etc/rsync.passwd
5.启动rsync
#启动
rsync --daemon
#关闭
pkill rsync
客户端配置
1.验证客户端是否安装rsync
[root@group7 ~]# rpm -qa | grep rsync
rsync-3.1.2-11.el7_9.x86_64
2.创建相应的密码文件
[root@nfs01 ~]# echo "123456" >>/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
3.实现数据传输
#客户端
[root@group7 backup]# touch hello.txt
[root@group7 backup]# ls
hello.txt ij tg[root@group7 backup]# rsync -avzP /etc/hosts rsync_backup@192.168.75.134::backup
Password:
sending incremental file list
hosts
158 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)sent 140 bytes received 43 bytes 40.67 bytes/sec
total size is 158 speedup is 0.86
#服务端查看
[root@tuxing backup]# ls
hosts ij tg
# –delete 选项,表示客户端上的数据要与服务器端完全一致,多则删之,少则补之 # 用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把 你的数据全部删除
rsync -avzP --delete myuser@10.10.10.15::backup /tmp/test/
# 下面的 rsync 命令将10.10.10.10主机上的 /www 目录(不包含 /www/logs 和 /www/conf子目录)复制到本地的 /backup/www/
rsync -avzP --delete --exclude "logs/" --exclude "conf/" \ 10.10.10.10:/www/ /backup/www/
rsync 适合对改动不频繁、大小比较小的文件进行同步,对于改动频繁的大 文件,只能偶尔同步一次,相当于备份的功能,而不是同步
rsync的完全备份和增量备份
完全备份
第一天,A主机向B主机发送10G文件,被B全部接收;第二天A又增加了5G文件,这时又将15G的文件全部传送给B主机。也就是A每天像B传送自己的全部文件
增量备份
第一天,A主机向B主机发送10G文件,被B全部接收;第二天A又增加了5G文件,传送前A先会去向B主机查看是否有该文件,发现有5G文件不存在,则只发送5G新增的文件。
rsync+inotify
inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多
内核参数
/etc/sysctl.conf(内核参数配置文件),需要配置
max_queue_events :监控事件队列大小
max_user_instances :最多监控实例
max_user_watches :每个实例最多监控文件数
配置的监控数量应该大于监控目标的总文件数
事件
inotify 监控的文件系统事件:
(1)access:文件被访问。
(2)modify:文件被修改。
(3)attrib:文件元数据被修改。
(4)open:文件被打开。
(5)create:在被监控的目录中创建了文件或目录。
(6)delete:删除了被监控目录中的某个文件或目录。 ......(还有更多事件)
操作
不指定监控某个事件,打开两个shell窗口,进行实验操作
也可以通过 -e 参数来监听具体事务
rsync+inotify实践
服务端配置
vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log # 日志文件位置,启动rsync后自动产生这 个文件,无需提前创建 在源服务器(客户端)
inotify.sh pidfile = /var/run/rsyncd.pid # pid文件的存放位置
lock file = /var/run/rsync.lock # 支持max connections参数的锁文件
secrets file = /etc/rsync.pass # 用户认证配置文件,里面保存用户名称和 密码,必须手动创建这个文件
[etc_from_client] # 自定义同步名称
path = /ysd/ # rsync服务端数据存放路径,客户端的数据将同步至此目 录
comment = sync etc from client
uid = root # 设置rsync运行权限为root
gid = root # 设置rsync运行权限为root
port = 873 # 默认端口
ignore errors # 表示出现错误忽略错误
use chroot = no # 默认为true,修改为no,增加对目录文件软连接的备份
read only = no # 设置rsync服务端为读写权限
list = no # 不显示rsync服务端资源列表
max connections = 200 # 最大连接数
timeout = 600 # 设置超时时间
auth users = admin # 执行数据同步的用户名,可以设置多个,用英文状态 下逗号隔开
hosts allow = 172.16.12.128 # 允许进行数据同步的客户端IP地址,可以设置 多个,用英文状态下逗号隔开
hosts deny = 192.168.1.1 # 禁止数据同步的客户端IP地址,可以设置多 个,用英文状态下逗号隔开
//创建用户认证文件
[root@131 ~]# echo 'admin:123456' > /etc/rsync.pass
[root@131 ~]# cat /etc/rsync.pass admin:123456
[root@131 ~]# chmod 600 /etc/rsync*
客户端配置
[root@60 ~]# echo '123456' > /etc/rsync.pass
[root@60 ~]# chmod 600 /etc/rsync.pass
inotify.sh
host=192.168.42.195 # 目标服务器的ip(备份服务器)
src=/runtime # 在源服务器上所要监控的备份目录(此处可以自定 义,但是要保证存在) des=etc_from_client # 自定义的模块名,需要与目标服务器上定义的同步名 称一致 password=/etc/rsync.pass # 执行数据同步的密码文件
user=admin # 执行数据同步的用户名
inotifywait=/usr/bin/inotifywait $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' - e modify,delete,create,attrib $src \ | while read files;do
rsync -avzP --delete --timeout=100 --passwordfile=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
[root@60 scripts]# chmod +x inotify.sh
[root@60 ~]# ./inotify.sh //执行
[root@60 ~]# cd /runtime/ //开另一个终端
[root@60 runtime]# ls
[root@60 runtime]# touch awm //随便创建一个文件
[root@60 ~]# ./inotify.sh
sending incremental file list //开始同步
runtime/
runtime/awm
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/2)
sent 125 bytes received 47 bytes 114.67 bytes/sec
total size is 0 speedup is 0.00
[root@131 ~]# cd /ysd/
[root@131 ysd]# ls runtime
[root@157 ym]# ll runtime/
总用量 0
-rw-r--r--. 1 root root 0 10月 11 20:28 awm
//让其在后台运行,并开机自启
[root@60 ~]# chmod +x /etc/rc.d/rc.local
[root@60 ~]# ll /etc/rc.
rc.d/ rc.local
[root@60 ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 474 3月 24 2020 /etc/rc.d/rc.loca
[root@60 ~]# vim /etc/rc.d/rc.local
# that this script will be executed during boot.
nohup /root/inotify.sh &
touch /var/lock/subsys/loca