虛擬機(jī)之間的通信
- ssh認(rèn)證
- 免密登錄
- 通過(guò)主機(jī)名實(shí)現(xiàn)ssh連接
- 更加簡(jiǎn)單的同步 rsync 與其二次封裝的 xsync
學(xué)習(xí)大數(shù)據(jù),配置集群時(shí),需要先讓虛擬機(jī)之間能夠自由通信。
看這篇文章前,必須確保各虛擬機(jī)的IP在同一網(wǎng)段。參考 Linux虛擬機(jī)安裝及靜態(tài)IP配置
下圖是我自己安裝了4臺(tái) centos8 虛擬機(jī),并配置了靜態(tài)IP:192,168.1.31、192,168.1.32、192,168.1.33、192,168.1.34 。它們對(duì)應(yīng)的主機(jī)名分別是flink01、flink02、flink03、flink04.

后邊講解下我是如何讓這4臺(tái)虛擬機(jī)免密連接的。不過(guò)文章截圖都是我配置好后的截圖,與配置過(guò)程可能有差異。
ssh認(rèn)證
SSH 是較可靠,專為 遠(yuǎn)程登錄 會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。
1、修改配置文件 /etc/ssh/sshd_config
RSAAuthentication yes # 啟用 RSA 認(rèn)證
PubkeyAuthentication yes # 啟用公鑰私鑰配對(duì)認(rèn)證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑
2、測(cè)試 192,168.1.31、192,168.1.32 是否能夠通信:[root@flink01 ~]# ssh 192,168.1.32。沒(méi)配置免密登錄前,是需要輸入密碼。
3、分別在各臺(tái)虛擬機(jī)上生成密鑰對(duì):例如 flink01虛擬機(jī),[root@flink01 ~]# ssh-keygen -t rsa。此時(shí) ~/ 下會(huì)生成一個(gè) .ssh 文件夾(開(kāi)始時(shí)沒(méi)有,如果有可能是其他ssh自動(dòng)生成的),該文件夾內(nèi)有2個(gè)文件id_rsa、id_rsa.pub,其中 id_rsa.pub 里邊放著本機(jī)的公鑰。

4、從上圖中可以看到還有兩個(gè)文件,其中 authorized_keys 是我自己創(chuàng)建的,寫(xiě)入所有虛擬機(jī)的公鑰。則該電腦則可以免密登錄所有虛擬機(jī)了。現(xiàn)在可以再次試一下[root@flink01 ~]# ssh 192,168.1.32。
第一次應(yīng)該不能識(shí)別
192,168.1.32,讓輸入密碼。輸入密碼成功后系統(tǒng)背后會(huì)自動(dòng)生成~/.ssh/known_hosts(有則不生成) ,并將192,168.1.32的認(rèn)證數(shù)據(jù)寫(xiě)入到該文件。然后下次[root@flink01 ~]# ssh 192,168.1.32就不會(huì)能識(shí)別不用輸入密碼了。

我感覺(jué)將內(nèi)容全部復(fù)制,粘貼到一個(gè)文件就挺方便的。不過(guò)這里還是介紹下
scp、cat兩個(gè)命令,可以更優(yōu)雅的實(shí)現(xiàn)上邊的配置。
scp 可傳輸文件或整個(gè)文件夾到另一臺(tái)設(shè)備上。這里是傳輸?shù)氖且粋€(gè)文件,如果另一臺(tái)設(shè)備上有該文件則被替換
[root@flink01 ~]# scp ~/.ssh/authorized_keys root@192.168.1.32:~/
cat 一般用于讀取某個(gè)文件的內(nèi)容。這里是將第一個(gè)文件內(nèi)容追加到第二個(gè)文件內(nèi),如果第二個(gè)文件沒(méi)有,則會(huì)創(chuàng)建然后追加(相當(dāng)于復(fù)制)
[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 訪問(wèn)其他虛擬機(jī)時(shí),免密認(rèn)證前的識(shí)別,通過(guò)密碼登錄另一臺(tái)電腦時(shí),將會(huì)自動(dòng)寫(xiě)入另一臺(tái)電腦的相關(guān)信息。
[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
當(dāng)然也可以手動(dòng)更改配置的,我的如下:

各虛擬機(jī)的
~/.ssh/known_hosts也保持一致??梢源直┑膹?fù)制粘貼,也可以使用scp、cat命令
6、上圖中我還將各虛擬機(jī)的主機(jī)名追加在了對(duì)應(yīng)位置:flink01,192.168.1.31 ecaddsa-sha2... 是希望虛擬機(jī)之間可以通過(guò)虛擬機(jī)的主機(jī)名就能訪問(wèn)。
7、配置 [root@flink01 ~]# vim /etc/hosts

8、可以試下:[root@flink01 ~]# ssh flink02 ??梢园l(fā)現(xiàn)現(xiàn)在不需要記住各虛擬機(jī)的IP,就能通信了。后邊配置集群,設(shè)置host時(shí),也可以直接使用主機(jī)名了。
9、如果是普通用戶,步驟同上,不過(guò)要設(shè)置文件讀取權(quán)限。
chmod 600 ~/.ssh/authorized_keys
是不是很開(kāi)心的解決了 CentOS8虛擬機(jī)之間的通信 呢?歡迎大家評(píng)論。如果覺(jué)得好,就來(lái)個(gè)贊吧。
更加簡(jiǎn)單的同步 rsync 與其二次封裝的 xsync
相對(duì)spc,用rsync做文件的復(fù)制的速度更快。rsync只對(duì)有差異文件做更新,而scp是把所有文件都復(fù)制過(guò)去。
安裝:
[root@flink01 ~]# yum install -y rsync
二次封裝rsync的 xsync
- 查看全局環(huán)境變量的所有路徑,在其中一個(gè)路徑下創(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,輸入如下內(nèi)容
#1. 判斷參數(shù)個(gè)數(shù)
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍歷集群所有機(jī)器
for host in flink01 flink02 flink03
do
echo ==================== $host ====================
#3. 遍歷所有目錄,挨個(gè)發(fā)送
for file in $@
do
#4. 判斷文件是否存在
if [ -e $file ]
then
#5. 獲取父目錄
pdir=$(cd -P $(dirname $file); pwd)
#6. 獲取當(dāng)前文件的名稱
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
- 放開(kāi)
/root/bin/xsync權(quán)限:
[root@flink01 bin]# chmod +x xsync
- 在任意路徑下使用 xsync,看是否能將文件同步到其他主機(jī)。例如同步
/root/bin/xsync,讓其他主機(jī)也有同步功能:
[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中已經(jīng)有該文件了。同樣放開(kāi)該文件權(quán)限即可使用了 _。
[root@flink02 bin]# chmod +x xsync