1.scp(secure copy)安全拷貝
(1)基本語法
scp -r 源路徑 目的地路徑
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 遞歸 要拷貝的文件路徑/名稱 目的地用戶@主機(jī):目的地路徑/名稱
scp -r $user@$host:$pdir/$fname $user@$host:$pdir/$fname
命令 遞歸 源地用戶@主機(jī):源路徑/名稱 目的地用戶@主機(jī):目的地路徑/名稱
指定端口號用-P 端口號
(2)案例實(shí)操
以下s1、s2、s3做了 /etc/hosts 配置,也可以切換為主機(jī) ip
-
在 s1 服務(wù)上,將 s1中 /opt/module/jdk1.8.0_212 目錄拷貝到 s2 /opt/module 目錄下。
$ scp -r /opt/module/jdk1.8.0_212 zy@s2:/opt/module
-
在 s2 服務(wù)上,將 s1 中 /opt/module/jdk1.8.0_212 目錄拷貝到 s2 上。
$ scp -r zy@s1:/opt/module/jdk1.8.0_212 /opt/module/
-
在 s2 服務(wù)上,將 s1 中 /opt/module目錄下所有目錄拷貝到 s3 上。
$ scp -r zy@s1:/opt/module/* zy@s3:/opt/module
2.rsync遠(yuǎn)程同步工具
rsync主要用于備份和鏡像。具有速度快、避免復(fù)制相同內(nèi)容和支持符號鏈接的優(yōu)點(diǎn)。
rsync和scp區(qū)別:用rsync做文件的復(fù)制要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都復(fù)制過去。
(1)基本語法
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 選項(xiàng)參數(shù) 要拷貝的文件路徑/名稱 目的地用戶@主機(jī):目的地路徑/名稱
選項(xiàng)參數(shù)說明
選項(xiàng) | 功能 |
---|---|
-a | 歸檔拷貝 |
-v | 顯示復(fù)制過程 |
(2)案例實(shí)操
在 s1 的 /opt/module/hadoop-3.1.3 下新增文件
-
同步 s1 中的 /opt/module/hadoop-3.1.3 到 s2
$ rsync -av jdk1.8.0_212/ zy@s2:/opt/module/jdk1.8.0_212/
3.腳本分發(fā)
期望腳本在任何路徑都能使用(腳本放在聲明了全局環(huán)境變量的路徑),以下路徑中都能全局使用
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zy/.local/bin:/home/zy/bin
腳本實(shí)現(xiàn)
在 /home/zy/bin 目錄下創(chuàng)建 xsync 文件
#!/bin/bash
#1. 判斷參數(shù)個(gè)數(shù)
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍歷集群所有機(jī)器
for host in s1 s2 s3
do
echo ==================== $host ====================
#3. 遍歷所有目錄,挨個(gè)發(fā)送
for file in $@
do
#4. 判斷文件是否存在
if [ -e $file ]
then
#5. 獲取父目錄, -P 是軟鏈接進(jìn)入實(shí)際目錄
pdir=$(cd -P $(dirname $file); pwd)
#6. 獲取當(dāng)前文件的名稱
fname=$(basename $file)
# -p 防止文件已存在報(bào)錯(cuò),加上不報(bào)錯(cuò)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
執(zhí)行
$ chmod +x xsync
$ xsync /home/zy/bin # 腳本分發(fā)到所有服務(wù)器
$ sudo ./bin/xsync /etc/profile.d/my_env.sh # root權(quán)限文件分發(fā)用sudo,路徑要寫完
4.ssh無密登錄
配置了次項(xiàng)過后,ssh在進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候就不用每次輸入密碼
各個(gè)服務(wù)器上執(zhí)行,在~/.ssh 目錄生成公鑰和私鑰
$ ssh-keygen -t rsa
將公鑰拷貝到要免密登錄的目標(biāo)機(jī)器上
$ ssh-copy-id server1 # 拷貝當(dāng)前服務(wù)器公鑰到 server1 服務(wù)器上
.ssh 文件夾下文件
文件名 | 描述 |
---|---|
known_hosts | 記錄ssh訪問過計(jì)算機(jī)的公鑰(public key) |
id_rsa | 生成的私鑰 |
id_rsa.pub | 生成的公鑰 |
authorized_keys | 存放授權(quán)過的無密登錄服務(wù)器公鑰 |