ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-22 20:32:13  阅读:216  来源: 互联网

标签:rsync 免密 xsync pdir 虚拟机 公钥 ssh 服务器


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存放授权过得无密登录服务器公钥

标签:rsync,免密,xsync,pdir,虚拟机,公钥,ssh,服务器
来源: https://blog.csdn.net/weixin_44976835/article/details/115092598

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有