sersync和ssh以及跳板机

sersync和ssh以及跳板机

sersync简介

1.什么是sersync
	实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。
2.为什么要用sersync
	保证数据的连续性, 减少人力维护成本,解决nfs单点故障
		nfs服务端出现故障,全部都不能用
3.怎么用sersync
	sersync= inotify+rsync+守护进程
	3.1、NFS实时同步到Rsync中
		①上传软件包
		②解压软件
		③解压完移动到/usr/local
		④修改配置文件/usr/local/GNU-Linux-x86/confxml.xml
--------------------------------------------------------------------------
		[root@nfs ~]# confxml.xml confxml.bak                   #备份配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>        #本机ip地址和端口
    <debug start="false"/>                            #是否打开调试模式
    <fileSystem xfs="false"/>                         #是否支持xfs文件系统
    <filter start="false">                            #是否过滤,是否排除名称中含有制定字符串的文件的同步
    <exclude expression="(.*)\.svn"></exclude>
    <exclude expression="(.*)\.gz"></exclude>
    <exclude expression="^info/*"></exclude>
    <exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
        #inotify 监控的动作
        <delete start="true"/>                        #删除动作
        <createFolder start="true"/>                   #创建文件夹动作
        <createFile start="true"/>                    #创建文件动作
        <closeWrite start="true"/>                    #写入完成动作
        <moveFrom start="true"/>                      #移动来自动作
        <moveTo start="true"/>                        #移动到动作
        <attrib start="true"/>                        #属性被更改
        <modify start="true"/>                        #修改动作
    </inotify>
 
    <sersync>
        <localpath watch="/data">                       #监控的目录
            <remote ip="172.16.1.41" name="web_data"/>            #远端rsync服务器的地址和模块
        </localpath>
        <rsync>
            <commonParams params="-az"/>                #rsync的参数
            <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/>
            #开启认证               #虚拟用户                   #指定虚拟用户的密码文件
            #如果远端rsync服务不是873端口,则开启并修改
            <userDefinedPort start="false" port="874"/><!-- port=874             #如果远端rsync服务不是873端口,则开启并修改
            <timeout start="false" time="100"/><!-- timeout=100 -->         #超时时间
            <ssh start="false"/>
        </rsync>
        #错误日志存储路径
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->        #定时任务,开启后,600分钟默认全备一次
        #定时任务,开启后,600分钟默认全备一次
        <crontab start="false" schedule="600"><!--600mins-->        #定时任务,开启后,600分钟默认全备一次
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
    </sersync>
  <plugin name="command">  #扩展插件功能的配置举例
    <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
    <filter start="false">
        <include expression="(.*)\.php"/>
        <include expression="(.*)\.sh"/>
    </filter>
    </plugin>
 
    <plugin name="socket">      #扩展插件功能的配置举例
    <localpath watch="/opt/tongbu">
        <deshost ip="192.168.138.20" port="8009"/>
    </localpath>
    </plugin>
    <plugin name="refreshCDN">              #扩展插件功能的配置举例
    <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
        <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
        <sendurl base="http://pic.xoyo.com/cms"/>
        <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
    </localpath>
    </plugin>
</head>
------------------------------------------------------------------------------
		⑤开始实时同步(监控哪一台服务器,就部署在哪台服务器)
		#记得在rsync端开启服务
		nfs配置文件也要修改
		
	3.2、rsync中也配置NFS服务端
		①下载安装nfs-utils rpcbind
		②设置/etc/exports
			/sersync 172.16.1.0/20(rw,all_squash,sync,anonuid=996,anongid=996)
		③启动systemctl start nfs-server rpcbind	
		④检查 showmount -e
		
	3.3、自动故障切换
		①判断是否故障写脚本
			[root@web02 ~]# vim nfs-test.sh 
                    #!/bin/bash
                    showmount -e 172.16.1.31
                    if [ $? -ne 0 ];then

                            # umount /var/www/html/upload
                            mount -t nfs 172.16.1.41:/sersync /var/www/html/upload
                    fi	
		②切换
			[root@web02 ~]# df -h
                Filesystem               Size  Used Avail Use% Mounted on
                devtmpfs                 475M     0  475M   0% /dev
                tmpfs                    487M     0  487M   0% /dev/shm
                tmpfs                    487M  7.5M  479M   2% /run
                tmpfs                    487M     0  487M   0% /sys/fs/cgroup
                /dev/mapper/centos-root   98G  2.5G   96G   3% /
                /dev/sda1                509M  162M  347M  32% /boot
                tmpfs                     98M     0   98M   0% /run/user/0
                172.16.1.31:/data         98G  4.5G   94G   5% /var/www/html/upload
                172.16.1.41:/sersync      98G  4.5G   94G   5% /var/www/html/upload
				只能指向一个源,虽然有两个,但是指向一个 谁在最下面指向谁
				实时切换加上一个定时任务
				* * * * * /root/nfs-test.sh $>/dev/null

ssh服务与telnet

SSH是一个加密的网络传输协议。相同的有一个telnet协议(明文)。
-eq等于
-ne不等于

telnet和ssh之间区别

telnet是明文,而ssh是密文。  一般用ssh

安装telnet服务

1、创建一个普通用户并设置密码1
    [root@m01 ~]# useradd test
    [root@m01 ~]# passwd test
    Changing password for user test.
    New password: 
    BAD PASSWORD: The password is a palindrome
    Retype new password: 
    passwd: all authentication tokens updated successfully.
2、安装telnet服务
	[root@m01 ~]# yum install telnet telnet-server -y	
3.开启telnet服务
	[root@m01 ~]# systemctl start telnet.socket
4.查看是否开启
        [root@m01 ~]# netstat -nutlp
        Active Internet connections (only servers)
        Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
        tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1333/sshd           
        tcp6       0      0 :::22                   :::*                    LISTEN      1333/sshd           
        tcp6       0      0 :::23                   :::*                    LISTEN      1/systemd           
        udp        0      0 127.0.0.1:323           0.0.0.0:*                           952/chronyd         
        udp6       0      0 ::1:323                 :::*                                952/chronyd     
5、连接telnet服务(新开个窗口)
	#telnet登录
	[c:\~]$ telnet test@192.168.15.71	
	
	#ssh登录
	[c:\~]$ ssh test@192.168.15.71

SSH服务相关的命令

1ssh   使用ssh登录
	ssh test@192.168.15.71 [command]
	ssh 命令
	test 用户
	@ 分隔符
	192.168.15.71 连接的ip
	command        需要执行的命令   比如ls  ll
2、 ssh-keygen      生产密钥证书
	执行这条命令会在家目录生成一个.ssh的隐藏目录
	目录里有id_rsa文件和id_rsa.pub文件
	id_rsa			私钥 (钥匙)
	id_rsa.pub       公钥  (锁)
3、 ssh-copy-id-i
	 ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.15.71
	 ssh-copy-id			  将公钥复制到指定服务器的命令(可以免密登录)
	 -i						 指定公钥
	 test 用户				用户名	
	 @ 						 分隔符,没实际作用					
	 192.168.15.71 			  连接的ip
	 结果会在指定的服务器/家目录/.ssh/中创建authorized_keys,并将公钥复制到authorized_keys这里 实现了免密登录

SSH的验证方式

1.密码验证
	输入密码
2.密钥验证
	新建一个密钥
	放在~/.ssh/authorized_keys 登录选择密钥

免密登录

前提:将公钥写入需要登录服务器的~/.ssh/authorized_keys这个目录中
相关的命令 ssh-copy-id -i
所有机器全部免密登录
[root@m01 .ssh]# for i in 5 6 7 8 9 31 41 51 61 71 ;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.$i; done

SSH企业案例(跳板机)

1.将跳板机免密登录所有机器
	[root@m01 .ssh]# for i in 5 6 7 8 9 31 41 51 61 71 ;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.$i; done
2.创建登录脚本
	    交互命令 read   read -p "请输入:" aaa
  		ping命令
  			-c:指定ping的次数
  			-t:指定每次ping的超时时间
  			

    
版本一:一进入就让选择登录的服务器
    交互命令 read
    [root@m01 ~]# vim login.sh 

    #!/bin/bash

    read -p "请输入:" aaa

    echo  $aaa
版本二:可以多次选择登录的服务器
 #!/bin/bash

while true
do

        echo "5)  lb01"
        echo "6)  lb02"
        echo "7)  web01"
        echo "8)  web02"
        echo "9)  web03"
        echo "31)  nfs"
        echo "41)  rsync"
        echo "51)  db01"
        echo "61)  lb01prometheus"
        echo "71)  m01"

        read -p "请输入你要登录的服务器:" IP

        ssh root@172.16.1.$IP
done

版本三:让他开机自动执行()
	放在/etc/profi.d
	mv login.sh /etc/profile.d/
	重启
版本四:超管可以通过用户名密码的方式,重新进入跳板机系统
	
 #!/bin/bash

while true
do

        echo "5)  lb01"
        echo "6)  lb02"
        echo "7)  web01"
        echo "8)  web02"
        echo "9)  web03"
        echo "31)  nfs"
        echo "41)  rsync"
        echo "51)  db01"
        echo "61)  lb01prometheus"
        echo "71)  m01"

        read -p "请输入你要登录的服务器:" IP

        if [[ $IP = "m" ]];then             # 空格记得左右都有 [[]]不知道为啥有俩

                read -p "请输入用户名:" USER
                read -p "请输入密码:" PASSWD

                if [[ $USER = "zhang" && $PASSWD = "123" ]];then  # 空格记得左右都有[[]]不知道为啥有俩
                        break
                fi
        fi
        ssh root@172.16.1.$IP
done
版本五:解决登录IP不存在的问题
 #!/bin/bash

while true
do

        echo "5)  lb01"
        echo "6)  lb02"
        echo "7)  web01"
        echo "8)  web02"
        echo "9)  web03"
        echo "31)  nfs"
        echo "41)  rsync"
        echo "51)  db01"
        echo "61)  lb01prometheus"
        echo "71)  m01"

        read -p "请输入你要登录的服务器:" IP

        if [[ $IP = "m" ]];then

                read -p "请输入用户名:" USER
                read -p "请输入密码:" PASSWD

                if [[ $USER = "zhang" && $PASSWD = "123" ]];then
                        break
                fi
        fi

        ping -c 1 -t 1 172.16.1.$IP &>/dev/null      #先ping一次试试结果放在/dev/null
        #0成功     非0失败
		#判断$? 不等于0 执行下面的 -ne不等于   -eq等于
        if [ $? -ne 0 ];then
                echo "你输入的$IP 错误"
                continue
        fi
done
版本六:完善使用ctrl+c进不去


SSH + VPN


posted @ 2021-10-21 22:08  迪迦张  阅读(54)  评论(0编辑  收藏  举报