首頁 > 軟體

linux跨伺服器複製檔案方式(scp含指令碼批次複製)

2023-04-02 06:03:33

前言

作為一名開發,也需要幹運維的工作,有時需要將一個檔案(jar包)批次拷貝到多臺 Linux 伺服器上。

如果逐臺scp命令拷貝,不僅需要更換ip,每次還需要輸入機器密碼,效率比較低下。

為提高效率,通過指令碼方式實現將檔案從一臺 Linux 主機批次拷貝到多臺伺服器,以下為實現方法。

1.純命令複製方式

1.1 單個檔案複製

scp /home/xxyy/manageweb/xxyy-web.jar xxyy@192.168.1.180:/home/xxyy/manageweb/bak

1.2 資料夾複製

加上 -r 即可

scp -r demoDir/ root@192.168.0.180:/opt/soft/

2. 指令碼方式批次分發

2.1 建立指令碼檔案 scp.sh

#!/bin/bash
echo "拷貝情況如下:" > test.log
n=`cat demoIplist.txt | wc -l` #分發的ip數量
fileName=demo-web.jar #分發檔名
echo "即將分發的檔案:$fileName"

for ((i=1; i <= $n; i++))
do
passwd=`cat demoPassword.txt | head -$i | tail -1`
ip=`cat demoIplist.txt | head -$i | tail -1`
echo $ip
##自動互動
expect <<EOF
spawn scp $fileName xxyyzz@$ip:/home/xxyyzz/manageweb/bak/
expect "yes/no" {send "yesn;exp_untinue"}
expect "password" {send "$passwdn"}
expect eof
EOF
if [ $? -eq 0 ];then
echo "$ip:成功" >>demoScpLog.log
echo "$ip:成功"
else
echo "$ip:失敗" >>demoScpLog.log
echo "$ip:失敗"

fi 
done
echo "複製完成!!!"

指令碼解析:

  • 1.迴圈執行scp命令
  • 2.迴圈切換demoIplist.txt中的目標ip
  • 3.迴圈輸入demoPassword.txt中的密碼
  • 4.傳輸成功或失敗,均分別列印到控制檯和紀錄檔

2.2 建立分發目標機器ip檔案 demoIplist.txt

指令碼迴圈讀取時,會受換行符影響,需要注意刪除多餘空行。

192.168.1.180192.168.1.179

2.3 建立分發目標機器password檔案 demoPassword.txt

由於生產上,不能設定免密傳輸,所以需要設定密碼。另外,如果密碼含有特殊字元,指令碼將執行失敗。

lC1yM51Dqxu7eq5Y13mUx1Uq6buG45mJ

2.4 執行.sh檔案

列印如下:

如上,即為指令碼分發檔案的方式。另外也可將檔名設定成檔案可編輯的方式,會更加靈活,此處檔名固定方式就夠用了。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com