虛擬機之間的通信
- ssh認證
- 免密登錄
- 通過主機名實現(xiàn)ssh連接
- 更加簡單的同步 rsync 與其二次封裝的 xsync
學習大數(shù)據(jù)评肆,配置集群時,需要先讓虛擬機之間能夠自由通信袜刷。
看這篇文章前议经,必須確保各虛擬機的IP在同一網段横堡。參考 Linux虛擬機安裝及靜態(tài)IP配置
下圖是我自己安裝了4臺 centos8 虛擬機埋市,并配置了靜態(tài)IP:192,168.1.31
、192,168.1.32
命贴、192,168.1.33
道宅、192,168.1.34
。它們對應的主機名分別是flink01套么、flink02培己、flink03、flink04.
后邊講解下我是如何讓這4臺虛擬機免密連接的胚泌。不過文章截圖都是我配置好后的截圖省咨,與配置過程可能有差異。
ssh認證
SSH 是較可靠玷室,專為 遠程登錄 會話和其他網絡服務提供安全性的協(xié)議零蓉。
1、修改配置文件 /etc/ssh/sshd_config
RSAAuthentication yes # 啟用 RSA 認證
PubkeyAuthentication yes # 啟用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑
2穷缤、測試 192,168.1.31
敌蜂、192,168.1.32
是否能夠通信:[root@flink01 ~]# ssh 192,168.1.32
。沒配置免密登錄前津肛,是需要輸入密碼章喉。
3、分別在各臺虛擬機上生成密鑰對:例如 flink01虛擬機,[root@flink01 ~]# ssh-keygen -t rsa
秸脱。此時 ~/
下會生成一個 .ssh
文件夾(開始時沒有落包,如果有可能是其他ssh自動生成的),該文件夾內有2個文件id_rsa
摊唇、id_rsa.pub
咐蝇,其中 id_rsa.pub
里邊放著本機的公鑰。
4巷查、從上圖中可以看到還有兩個文件有序,其中 authorized_keys
是我自己創(chuàng)建的,寫入所有虛擬機的公鑰岛请。則該電腦則可以免密登錄所有虛擬機了⌒袷伲現(xiàn)在可以再次試一下[root@flink01 ~]# ssh 192,168.1.32
。
第一次應該不能識別
192,168.1.32
崇败,讓輸入密碼许师。輸入密碼成功后系統(tǒng)背后會自動生成~/.ssh/known_hosts
(有則不生成) ,并將192,168.1.32
的認證數(shù)據(jù)寫入到該文件僚匆。然后下次[root@flink01 ~]# ssh 192,168.1.32
就不會能識別不用輸入密碼了。
我感覺將內容全部復制搭幻,粘貼到一個文件就挺方便的咧擂。不過這里還是介紹下
scp
、cat
兩個命令檀蹋,可以更優(yōu)雅的實現(xiàn)上邊的配置松申。
scp 可傳輸文件或整個文件夾到另一臺設備上。這里是傳輸?shù)氖且粋€文件俯逾,如果另一臺設備上有該文件則被替換
[root@flink01 ~]# scp ~/.ssh/authorized_keys root@192.168.1.32:~/
cat 一般用于讀取某個文件的內容贸桶。這里是將第一個文件內容追加到第二個文件內,如果第二個文件沒有桌肴,則會創(chuàng)建然后追加(相當于復制)
[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
當然也可以手動更改配置的彪置,我的如下:
各虛擬機的
~/.ssh/known_hosts
也保持一致拄踪。可以粗暴的復制粘貼拳魁,也可以使用scp
惶桐、cat
命令
6、上圖中我還將各虛擬機的主機名追加在了對應位置:flink01,192.168.1.31 ecaddsa-sha2...
是希望虛擬機之間可以通過虛擬機的主機名就能訪問。
7姚糊、配置 [root@flink01 ~]# vim /etc/hosts
8贿衍、可以試下:[root@flink01 ~]# ssh flink02
∨芽剑可以發(fā)現(xiàn)現(xiàn)在不需要記住各虛擬機的IP舌厨,就能通信了。后邊配置集群忿薇,設置host時裙椭,也可以直接使用主機名了。
9署浩、如果是普通用戶揉燃,步驟同上,不過要設置文件讀取權限筋栋。
chmod 600 ~/.ssh/authorized_keys
是不是很開心的解決了 CentOS8虛擬機之間的通信 呢炊汤?歡迎大家評論。如果覺得好弊攘,就來個贊吧抢腐。
更加簡單的同步 rsync 與其二次封裝的 xsync
相對spc,用rsync做文件的復制的速度更快襟交。rsync只對有差異文件做更新迈倍,而scp是把所有文件都復制過去。
安裝:
[root@flink01 ~]# yum install -y rsync
二次封裝rsync的 xsync
- 查看全局環(huán)境變量的所有路徑捣域,在其中一個路徑下創(chuàng)建腳本文件
[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. 判斷參數(shù)個數(shù)
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍歷集群所有機器
for host in flink01 flink02 flink03
do
echo ==================== $host ====================
#3. 遍歷所有目錄,挨個發(fā)送
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
贞言,發(fā)現(xiàn)flink02
中已經有該文件了斜棚。同樣放開該文件權限即可使用了 _。
[root@flink02 bin]# chmod +x xsync