Linux之SSH、rsync

目录

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加密实现远程登录。

基于密钥认证 

        大致流程是这样的

  1. SSH客户端以root用户身份创建密钥对
  2. 服务端将公钥信息导入用户root的公钥数据库文件
  3. 客户端以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 = false

hosts 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值