美文网首页
CentOS8虚拟机之间的通信

CentOS8虚拟机之间的通信

作者: 阿文灬 | 来源:发表于2021-07-28 09:26 被阅读0次

    虚拟机之间的通信

    • ssh认证
    • 免密登录
    • 通过主机名实现ssh连接
    • 更加简单的同步 rsync 与其二次封装的 xsync

    学习大数据,配置集群时,需要先让虚拟机之间能够自由通信。
    看这篇文章前,必须确保各虚拟机的IP在同一网段。参考 Linux虚拟机安装及静态IP配置

    下图是我自己安装了4台 centos8 虚拟机,并配置了静态IP:192,168.1.31192,168.1.32192,168.1.33192,168.1.34 。它们对应的主机名分别是flink01、flink02、flink03、flink04.

    image.png

    后边讲解下我是如何让这4台虚拟机免密连接的。不过文章截图都是我配置好后的截图,与配置过程可能有差异。

    ssh认证

    SSH 是较可靠,专为 远程登录 会话和其他网络服务提供安全性的协议。

    1、修改配置文件 /etc/ssh/sshd_config

    RSAAuthentication yes # 启用 RSA 认证
    PubkeyAuthentication yes # 启用公钥私钥配对认证方式
    AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径
    

    2、测试 192,168.1.31192,168.1.32 是否能够通信:[root@flink01 ~]# ssh 192,168.1.32。没配置免密登录前,是需要输入密码。

    3、分别在各台虚拟机上生成密钥对:例如 flink01虚拟机,[root@flink01 ~]# ssh-keygen -t rsa。此时 ~/ 下会生成一个 .ssh 文件夹(开始时没有,如果有可能是其他ssh自动生成的),该文件夹内有2个文件id_rsaid_rsa.pub,其中 id_rsa.pub 里边放着本机的公钥。

    image.png

    4、从上图中可以看到还有两个文件,其中 authorized_keys 是我自己创建的,写入所有虚拟机的公钥。则该电脑则可以免密登录所有虚拟机了。现在可以再次试一下[root@flink01 ~]# ssh 192,168.1.32

    第一次应该不能识别 192,168.1.32 ,让输入密码。输入密码成功后系统背后会自动生成 ~/.ssh/known_hosts (有则不生成) ,并将 192,168.1.32 的认证数据写入到该文件。然后下次 [root@flink01 ~]# ssh 192,168.1.32 就不会能识别不用输入密码了。

    image.png

    我感觉将内容全部复制,粘贴到一个文件就挺方便的。不过这里还是介绍下 scpcat两个命令,可以更优雅的实现上边的配置。

    scp 可传输文件或整个文件夹到另一台设备上。这里是传输的是一个文件,如果另一台设备上有该文件则被替换
    [root@flink01 ~]# scp ~/.ssh/authorized_keys root@192.168.1.32:~/
    
    cat 一般用于读取某个文件的内容。这里是将第一个文件内容追加到第二个文件内,如果第二个文件没有,则会创建然后追加(相当于复制)
    [root@flink02 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
    [root@flink02 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    [root@flink02 ~]# cat ~/.ssh/authorized_keys
    
    删除 192.168.1.32:~/authorized_keys
    [root@flink02 ~]# rm -rf ~/authorized_keys
    

    5、上边提到 ~/.ssh/known_hosts 是在 ssh 访问其他虚拟机时,免密认证前的识别,通过密码登录另一台电脑时,将会自动写入另一台电脑的相关信息。

    [root@flink01 ~]# ssh 192,168.1.31
    // 自己
    [root@flink01 ~]# ssh 192,168.1.32
    // 输入密码
    [root@flink01 ~]# ssh 192,168.1.33
    // 输入密码
    [root@flink01 ~]# ssh 192,168.1.34
    

    当然也可以手动更改配置的,我的如下:

    image.png

    各虚拟机的 ~/.ssh/known_hosts 也保持一致。可以粗暴的复制粘贴,也可以使用 scpcat 命令

    6、上图中我还将各虚拟机的主机名追加在了对应位置:flink01,192.168.1.31 ecaddsa-sha2... 是希望虚拟机之间可以通过虚拟机的主机名就能访问。

    7、配置 [root@flink01 ~]# vim /etc/hosts

    image.png

    8、可以试下:[root@flink01 ~]# ssh flink02 。可以发现现在不需要记住各虚拟机的IP,就能通信了。后边配置集群,设置host时,也可以直接使用主机名了。

    9、如果是普通用户,步骤同上,不过要设置文件读取权限。

    chmod 600 ~/.ssh/authorized_keys
    

    是不是很开心的解决了 CentOS8虚拟机之间的通信 呢?欢迎大家评论。如果觉得好,就来个赞吧。

    更加简单的同步 rsync 与其二次封装的 xsync

    相对spc,用rsync做文件的复制的速度更快。rsync只对有差异文件做更新,而scp是把所有文件都复制过去。

    安装:

    [root@flink01 ~]# yum install -y rsync
    

    二次封装rsync的 xsync

    • 查看全局环境变量的所有路径,在其中一个路径下创建脚本文件
    [root@flink01 ~]# echo $PATH
    /opt/jdk1.8.0_291/bin:/opt/hadoop-3.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    
    [root@flink01 ~]# vim /root/bin/xsync
    
    • 编辑 /root/bin/xsync,输入如下内容
    #1. 判断参数个数
    if [ $# -lt 1 ]
    then
        echo Not Enough Arguement!
        exit;
    fi
    
    #2. 遍历集群所有机器
    for host in flink01 flink02 flink03
    do
        echo ====================  $host  ====================
        #3. 遍历所有目录,挨个发送
    
        for file in $@
        do
            #4. 判断文件是否存在
            if [ -e $file ]
                then
                    #5. 获取父目录
                    pdir=$(cd -P $(dirname $file); pwd)
    
                    #6. 获取当前文件的名称
                    fname=$(basename $file)
                    ssh $host "mkdir -p $pdir"
                    rsync -av $pdir/$fname $host:$pdir
                else
                    echo $file does not exists!
            fi
        done
    done
    
    • 放开 /root/bin/xsync 权限:
    [root@flink01 bin]# chmod +x xsync
    
    • 在任意路径下使用 xsync,看是否能将文件同步到其他主机。例如同步 /root/bin/xsync ,让其他主机也有同步功能:
    [root@flink01 bin]# xsync ~/bin/xsync
    ==================== flink01 ====================
    sending incremental file list
    
    sent 44 bytes  received 12 bytes  112.00 bytes/sec
    total size is 733  speedup is 13.09
    ==================== flink02 ====================
    sending incremental file list
    xsync
    
    sent 824 bytes  received 35 bytes  572.67 bytes/sec
    total size is 733  speedup is 0.85
    ==================== flink03 ====================
    sending incremental file list
    xsync
    
    sent 824 bytes  received 35 bytes  1,718.00 bytes/sec
    total size is 733  speedup is 0.85
    
    
    • 连接 flink02,发现 flink02 中已经有该文件了。同样放开该文件权限即可使用了 _
    [root@flink02 bin]# chmod +x xsync
    

    相关文章

      网友评论

          本文标题:CentOS8虚拟机之间的通信

          本文链接:https://www.haomeiwen.com/subject/thawpltx.html