• 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参数:

    1.         -r        复制目录
    2.         -p        复制目录时保留属性
    3. -P 接端口,默认22号端口
    4. -l 限制速度

    scp可以将文件或目录推送至目标主机;也可以从目标主机拉取文件到本机。举例说明,

    现在我使用的主机为192.168.75.130,目标主机为192.168.75.137;

    1. 推:scp -r -p /home/monkey.txt 192.168.75.137:/home
    2. #将130的主机的monkey.txt文件推送到137的主机的/home下
    3. 拉: scp -p 192.168.75.137:/home/cpu.sh ./
    4. #将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基本用法

    1. ssh -p user@host
    2. -p 指定端口
    3. user 登陆的用户名
    4. 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命令查看端口是否打开

    1. rsync --daemon
    2. [root@group7 ~]# netstat -nlt
    3. Active Internet connections (only servers)
    4. Proto Recv-Q Send-Q Local Address Foreign Address State
    5. tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
    6. tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
    7. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
    8. tcp6 0 0 :::873 :::* LISTEN
    9. tcp6 0 0 :::3306 :::* LISTEN
    10. tcp6 0 0 :::111 :::* LISTEN
    11. tcp6 0 0 :::22 :::* LISTEN
    12. 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。

    1. # 若rsync服务端SSH为标准端口,此时rsync使用方式如下:
    2. rsync -avz /root/test root@10.10.10.10:/root/
    3. # 若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:
    4. 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

  • 相关阅读:
    JDY-16 蓝牙4.2模块串口测试方法
    表格文字识别易语言代码
    NR频率资源划分
    Mysql 通过binlog伪装master恢复数据库
    Spring
    页面多查询条件必选的统一处理思路
    【编程必备知识】文件内容的读写
    竞赛 深度学习 opencv python 公式识别(图像识别 机器视觉)
    使用springdoc-openapi-starter-webmvc-ui后访问swagger-ui/index.html 报错404
    双环PID控制详细讲解
  • 原文地址:https://blog.csdn.net/qq_60787657/article/details/127993897