scp、rsync/xsync分发脚本/SSH免密登录

本文介绍了如何使用SCP进行全量拷贝Hadoop和JDK,rsync的增量同步以提高效率,并详细讲解了xsync脚本实现批量远程目录同步,包括SSH免密登录设置和关键文件管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scp:安全拷贝

  • 我们已经在一台虚拟机上安装了hadoop和jdk,那么需要将这台虚拟机上的hadoop和jdk拷贝到其他虚拟机上:scp -r jdk-15.0.2/ $用户名@hadoop102:/opt/module/这是"推"。或者也可以采用"拉":scp -r $用户名@hadoop100:/opt/module/hadoop-3.1.4将文件从另一台虚拟机拉过来。这两种方法都可以,一个是被动等别人传数据,一个是主动拉取数据。

  • 还有一种方法,可以在第102号虚拟机,将100号虚拟机的文件拷贝到103号虚拟机上:scp -r fzl@hadoop100:/opt/module/* fzl@hadoop103:/opt/module/

  • 然后将/etc/profile.d/下的环境变量拷贝

rsync:远程同步

  • scp是完全复制,如果是只需要更改几个文件的话,完全复制效率比较低,这时候就用到了rsync命令:同步
  • rsync:只同步两边不一样的部分,例如在hadoop100里改了一份xml,同步到hadoop102,那么就只同步被改的xml,其他的不用改变,效率较高
  • rsync -av hadoop-3.1.4/ $用户名@hadoop104:/opt/module/

xsync自动分发脚本

  • 首先安装rsync
  • 然后在~目录下创建bin目录存放脚本
  • 然后创建脚本文件touch xsync
  • 写脚本vim xsync
  • 下方脚本功能:自动将目录同步到hadoop102、hadoop103、hadoop104上
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{102..104};
for host in hadoop102 hadoop103 hadoop104
do
    echo ====================    $host    ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4 判断文件是否存在
        if [ -e $file ]
        then
            #5. 获取父目录
            pdir=$(cd -P $(dirname $file); pwd)
            echo pdir=$pdir
            
            #6. 获取当前文件的名称
            fname=$(basename $file)
            echo fname=$fname
            
            #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
            ssh $host "mkdir -p $pdir"
            
			#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
            rsync -av $pdir/$fname $USER@$host:$pdir
        else
            echo $file does not exists!
        fi
    done
done

  • 然后要给xsync脚本权限chmod 777 xsync
  • 调用脚本方法:xsync ~/bin(要同步的文件夹),这里我们直接通过脚本将脚本同步到hadoop102、hadoop103、hadoop104系统

SSH免密登录

  • 集群间可以通过配置SSH实现免密登录
  • 将服务器A的公钥拷贝给服务器B,就相当于服务器A给服务器B授权允许服务器B免密登录
  • 当SSH访问服务器B(数据用私钥A加密)
  • 服务器B接收数据,查找有无服务器A发来的公钥A,如果发现存在公钥A
  • 服务器B会用公钥A加密数据并返回给服务器A
  • 服务器A接收到数据后,会用自己的私钥A来解密服务器B发来的数据
  • 这样就实现了免密通讯

ssh-keygen -t rsa/home/用户名/.ssh/目录下生成秘钥对

然后要将公钥拷贝到集群中其他虚拟机上,才能实现SSH免密登录
ssh-copy-id hadoop102,这里拷贝到102上。

然后测试:ssh hadoop102,免密登录成功
在这里插入图片描述
集群中其他虚拟机也按如上配置,就都实现了SSH免密登录。

.ssh目录下有如下文件:
在这里插入图片描述
分别有如下功能:

文件名功能
known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过得无密登录服务器公钥
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yui方木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值