目錄
- 集群分發腳本xsync
- scp(secure copy)安全拷貝
- rsync 遠程同步工具
- 集群分發腳本
- SSH免密登錄
- 免密登錄原理
- SSH免密登錄配置
- 生成公鑰和私鑰
- 授權
- 測試
在現代科技飛速發展的時代,數據的備份和遷移成為了一個重要的課題。其中,rsync遠程同步和SSH免密登錄成為了程序員們常用的工具和技巧。它們能夠幫助我們高效地進行文件同步和管理,使數據的傳輸更加快速和安全。
在本篇文章中,我們將深入探索rsync遠程同步和SSH免密登錄的奧秘。我們將介紹如何配置SSH免密登錄,以及如何使用rsync來進行文件的遠程同步。
集群分發腳本xsync
scp(secure copy)安全拷貝
(1)定義:scp可以實現服務器與服務器之間的數據拷貝
(2)基本語法:
scp -r $pdir/$fname $user@$host:$pdir/$fname
# scp 命令
# -r 遞歸
# $pdir/$fname 要拷貝的文件路徑/名稱
# $user@$host:$pdir/$fname 目的地用戶名@主機:目的地路徑/名稱
(3)案例:
在hadoop102上,把數據拷貝到hadoop103
scp -r jdk1.8.0_371/ root@hadoop103:/opt/module
在hadoop103上,拉取hadoop102的數據
scp -r root@hadoop102:/opt/module/hadoop-3.2.4 ./
rsync 遠程同步工具
rsync是一個功能強大的文件同步工具,它能夠通過比較源和目標文件的內容差異,只傳輸差異部分,從而大幅度提升文件傳輸的效率。這種差異傳輸的機制,使得rsync在大規模數據備份和遷移中得到了廣泛的應用。它能夠通過多種傳輸協議,包括本地文件系統、SSH和RSYNC等,來實現跨平臺和跨網絡的文件同步。
rsync主要用于備份和鏡像,具有速度快、避免復制相同的內容和支持符號鏈接的特點。
rsync比 scp 復制文件速度要快,rsync只對差異化文件做更新,scp是把所有文件都復制過去
- 基本語法
rsync -av $pdir/$fname $user@host:$pdir/$fname
# rsync 命令
# -av -a 歸檔拷貝 -v 顯示復制過程
# $pdir/$fname 要拷貝的文件路徑/名稱
# $user@host:$pdir/$fname 目的地用戶名@主機目的地路徑/名稱
- 案例:
在hadoop102上,同步hadoop102上的數據到hadoop103
rsync -av hadoop-3.2.4/ root@hadoop103:/opt/module/hadoop-3.2.4/
集群分發腳本
循環復制文件到所有節點的相同目錄下
rsync命令原始拷貝rsync -av /opt/module root@hadoop103:/opt
期望腳本使用方式:xsync 要同步的文件名稱
期望腳本在任何路徑都能使用(腳本放在聲明了全局環境變量的路徑)
[amo@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_371/bin:/opt/module/hadoop-3.2.4/bin:/opt/module/hadoop-3.2.4/sbin:/home/amo/.local/bin:/home/amo/bin
home目錄下創建bin文件夾,并在該文件夾下創建xsync文件vim xsync
(名字隨便起)
#!/bin/bash#1.判斷參數個數
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2.遍歷集群所有機器
for host in hadoop102 hadoop103 hadoop104
doecho ========= = $host =============#3.遍歷所有目錄,一個個發送for file in $@do#4.判斷文件是否存在if [ -e $file ]then#5.獲取父目錄pdir=$(cd -P $(dirname $file); pwd)#6.獲取當前文件的名稱filename=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$filename $host:$pdirelseecho $file does not exists!fidone
done
修改腳本 xsync 具有執行權限
chmod 777 xsync
測試腳本
xsync /bin
將腳本復制到/bin中,以便全局調用
sudo cp xsync /bin/
同步環境變量配置(root所有者)
sudo ./bin/xsync /etc/profile.d/my_env.sh
環境變量生效source /etc/profile
SSH免密登錄
SSH免密登錄則是一種安全的通信協議,它能夠建立起安全的連接,從而實現在遠程服務器上執行命令,而無需手動輸入密碼。通過使用公鑰和私鑰的加密方式,SSH免密登錄能夠防止密碼被竊取,并提供更高的安全性。
免密登錄原理
- A服務器通過
ssh-keygen -t rsa
命令生成密鑰對(公鑰和私鑰) - A服務器通過
ssh-copy-id 服務器B
命令將公鑰拷貝到B服務器 - A服務器ssh訪問B服務器(數據用私鑰加密)
- B服務器接收到數據后,去授權的key中查找A服務器的公鑰,并解密數據
- 將采用A公鑰加密后的數據返回給A服務器
SSH免密登錄配置
#切換到home目錄下
cd ~
# 查看home目錄下的所有文件(包括隱藏文件)
ll -al
# 切換到.ssh文件夾下
cd .ssh
# 生成公鑰和私鑰
ssh-keygen -t rsa
# 授權給另一個服務器
ssh-copy-id hadoop103
生成公鑰和私鑰
# 生成公鑰和私鑰
[root@hadoop102 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pCATVCsPvIqYqZMz0KYnHxIE5V7gsqz+MU41co6SkNY root@hadoop102
The key's randomart image is:
+---[RSA 2048]----+
|.o=.. |
|.+ o . |
|..O + . |
|o=.O . o |
|=+oE.+. S |
|B=+ * . |
|X*.= . |
|X.=.o |
|.Ooo |
+----[SHA256]-----+
授權
將生成的公鑰通過命令拷貝到你要授權的服務器
# 授權
[root@hadoop102 .ssh]# ssh-copy-id hadoop103
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@hadoop103's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh 'hadoop103'"
and check to make sure that only the key(s) you wanted were added.[root@hadoop102 .ssh]# ssh-copy-id hadoop104
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@hadoop104's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh 'hadoop104'"
and check to make sure that only the key(s) you wanted were added.
測試
[amo@hadoop102 ~]$ ssh hadoop103
Last login: Fri Mar 1 19:40:22 2024 from 192.168.1.1
[amo@hadoop103 ~]$