linux-SSH服务&RSYNC远程同步练习

13.1某企业要对两台服务器做双机互信,编写脚本解决

  • 编写脚本 vim ssh.exp
  1 #!/usr/bin/expect
  2 
  3 set user [lindex $argv 0]	#目标服务器登录用户
  4 set iddr [lindex $argv 1]	#目标服务器IP
  5 set pass [lindex $argv 2]	#目标服务器登录用户的密码
  6 
  7 spawn ssh-keygen #监控秘钥生成
  8 expect "(/root/.ssh/id_rsa):"
  9   send "\r"
 10 expect "passphrase):"
 11   send "\r"
 12 expect "again:"
 13   send "\r"
 14 
 15 spawn ssh-copy-id $user@$iddr	#监控传输公钥
 16 expect "(yes/no)?"	#捕获关键字
 17   send "yes\r"
 18 expect "password:"
 19   send "$pass\r"	#发送服务器登录用户的密码
 20 #expect eof
 21 interact

测试:
客户端 ssh root@192.168.253.200,无需输入密码直接登陆
在这里插入图片描述

13.2. ssh连接速度慢的原因有哪些?

  1. UseDNS no ,指定是否将客户端主机名解析为IP,该项影响主机验证阶段,未配置DNS解析时改为no,可减少主机验证阶段的时间。

  2. GSSAPIAuthentication no ,指定是否开启SSAPI身份认证机制,该项影响身份验证阶段,不需要用到改为no,减少身份验证阶段的时间。
    解决方法:
    修改服务端配置文件: /etc/ssh/sshd_config :将UseDNS 、GSSAPIAuthentication 设置为 no

13.3. ssh如何实现访问控制

  • 通过修改/etc/ssh/sshd_config配置文件,限制用户通过ssh访问
    文件规则:
allowusers *@172.16.200.222  #内容格式
denyusers *@*  #表示禁止所有用户通过ssh登录
allowusers *@172.16.200.222  #表示允许所用用户并且源地址是172.16.200.222的用户登录
  • 例:在sshd_config中添加(本机IP:192.168.253.200):
denyusers *@192.16.253.199  #禁止源地址是192.168.253.199的所有用户通过ssh登录
  • 重启sshd服务
systemctl restart sshd

测试文件修改完成后尝试用非法地址(在192.168.253.199上ssh访问)访问设置成功的机器
在这里插入图片描述

13.4. 使用SecureCRT或Xeshell实现代理转发连接ssh服务器

  • 配置注意事项:

    • 保证跳板机和目的服务器都开启密钥登录(PubkeyAuthentication yes);
    • 将本地用户的公钥分发到跳板机和目的机器上(/home/gentoo/.ssh/authorized_keys);
    • 运维人员本地的Xeshell中做好密钥对相关配置;
  • 本地Xeshell的配置
    在这里插入图片描述

  • 选择秘钥和登陆的用户
    在这里插入图片描述

13.5.使用跳板机一键登录目标服务器

  • Xshell增加一个对话,填写host(要连接的主机IP)
    在这里插入图片描述

  • 配置认证的方式–密钥认证,并创建密钥
    在这里插入图片描述

  • 选择KEY相应的类型与长度
    在这里插入图片描述

  • Xshell自动创建密钥文件
    在这里插入图片描述

  • 设置密钥文件名,这里先不为密钥设置密码
    在这里插入图片描述

  • 保存公钥文件(记住路径)
    在这里插入图片描述

  • 选择刚刚创建的私钥
    在这里插入图片描述

  • 选择秘钥和设置登陆的用户
    在这里插入图片描述

  • 接下来,把生成的公钥上传到服务器了。我们直接用Xshell自带的一个sftp功能来上传我们生成的文件
    设置一下本地的工作目录(保存公钥的路径),方便我们上传文件
    在这里插入图片描述

  • 用sftp来连接远程的服务器,然后上传我们的公钥文件,这时候不要选择秘钥登陆,因为我们还没有进行配置,所以必需使用密码登陆

Xshell:\> sftp root@192.168.253.200

在这里插入图片描述

  • 向服务器传文件(保存在/root/目录下)
put id_rsa_2048.pub

在这里插入图片描述

  • 接下来,用SSH的普通方法(用户名和密码)登陆服务器
ssh root@192.168.253.200
  • 然后修改我们服务器的 .ssh/sshd_config配置文件,启用密钥认证 – PubkeyAuthentication yes
    将上传的公钥重定向到密钥认证文件 .ssh/authorized_keys
cat /root/id_rsa_2048.pub >> .ssh/authorized_keys 
  • 重启sshd服务,service sshd restart;
    exit,这时候,你就可以重新换用密钥方式一键登陆目标服务器了,已经无需输入任何密码。

13.6. 将本地/var/log目录文件同步到远程主机的/data/log目录中

  1. 客户端、服务端:
yum install rsync
  1. 客户端推送文件 /var/log :
 rsync -av /var/log root@192.168.253.200:/data/log
  1. 服务端查看:
    在这里插入图片描述

13.7. 配置rsync服务推动/var/log目录文件到rsync服务器指定模块中

  1. 配置rsyncd服务器:
  • 创建配置文件
vim /etc/rsyncd.conf
  • 内容
uid = rsync   #客户端连接到服务端后服务端进程执行者
gid = rsync   #执行组
use chroot = no   #是否可以切换到root目录
max connections = 10
timeout 300
strict modes = yes
pid file = /var/run/rsyncd.pid   #pid文件
lock file = /var/run/rsyncd.lock #锁文件,保持文件一致性
log file = /var/log/rsyncd.log   #日志文件

#模块定义
[backmod]     #模块名称
path = /backup   #备份目录
comment = backup file  #模块说明
ignore errors   #忽略错误
read only = no  #可写
hosts allow = *  #允许
#hosts deny = 172.16.1.1  #拒绝
list = false   #能否被列表
auth users = alice  #用来进行同步的用户,不需要系统用户中有,虚拟的就行 
secrets file = /etc/rsync.passwd  #用户帐号密码文件(权限必须是600)
  • 创建密码文件并修改权限为600
vim /etc/rsync.passwd:alice:123456
chmod 600 /etc/rsync.passwd
  • 创建共享目录并授权
mkdir /backup
chown -R rsync.rsync /backup
  • 启动脚本
    由一个超级进程负责管理的守护进程
rsync --daemon --config=/etc/rsyncd.conf
  • 加入开机自动启动脚本
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
  1. rsync客户端
  • 配置密码文件
vim /etc/rsync.passwd:123456

  • 推送文件
rsync -av /var/log rsync://alice@192.168.253.200/backmod --password-file=/etc/rsync.passwd

在这里插入图片描述

13.8. 实时同步/var/log目录下的文件(参考优化后的版本,并读懂做好注释)

  • 客户端创建脚本(被同步的一端为服务端,要把文件同步到另一端的源端为客户端):
vim bakup.sh
  • 内容:
 1 #!/bin/bash	
  2 src=/data/		# 客户端需要同步的源路径
  3 des=backmod		#服务器上 rsync --daemon 发布的模块名称
  4 rsync_passwd_file=/etc/rsync.passwd		# rsync验证的密码文件
  5 ip1=192.168.253.200		 # 目标服务器
  6 user=root       # rsync --daemon定义的验证用户名
  7 cd ${src}		# 由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听
  8 /usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file   # 把监控到有发生更改的"文件路径列表"循环     
  9 do
 10         INO_EVENT=$(echo $file | awk '{print $1}')	# inotify输出格式为:事件类型 文件路径(CREATE ./aa) 把事件类型部分赋值给INO_EVENT
 11         INO_FILE=$(echo $file | awk '{print $2}') 	 # 把文件路径部分赋值给INO_FILE
 12         echo "-------------------------------$(date)------------------------------------"
 13         echo $file
 14         if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO'     ]]   # 判断事件类型是否为:增加、修改、写入完成、移动进事件   
 15         then
 16                 echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
 17                 rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}	# 同步备份文件,INO_FILE变量代表路径,-c校验文件内容
 18 
 19         fi
 20         if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]	 # 判断事件类型是否为:删除、移动出事件
 21         then
 22                 echo 'DELETE or MOVED_FROM'
 23                 rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}	 #--delete来删除目标上有而源中没有的文件
 24 
 25         fi
 26         if [[ $INO_EVENT =~ 'ATTRIB' ]]	# 判断事件类型是否为:修改属性事件
 27         then
 28                 echo 'ATTRIB'
 29                 if [ ! -d "$INO_FILE" ]	 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
 30                 then 
 31                         rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
 32
 33                 fi
 34         fi      
 35 done
  • 增加权限且运行
chmod +x backup.sh
./backup.sh
  • 客户端打开新的窗口,在目录/data下操作文件
    例1:创建文件 : touch aa
    查看状态信息:
    在这里插入图片描述

  • 查看服务端/backup目录信息:
    文件aa同步成功
    在这里插入图片描述
    例2:修改文件: echo “123” > aa
    查看状态信息:
    在这里插入图片描述
    查看服务端/backup目录信息:
    文件时间属性发生变化
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值