Ubuntu向多臺主機批量傳輸文件的流程步驟
更新時間:2025年09月25日 10:17:36 作者:Tangineer
這篇文章主要介紹了在Ubuntu中批量傳輸文件到多臺主機的方法,需確保主機互通、用戶名密碼統(tǒng)一及端口開放,通過安裝sshpass工具,準備包含目標主機信息的hosts.txt文件,并編寫批處理腳本實現(xiàn)自動化傳輸,需要的朋友可以參考下
ubuntu 向多臺主機批量傳輸文件
前提:
- 主機之間可以相互通信
- 所有主機用戶名相同,或開放 ssh root 用戶遠程連接權(quán)限
- 所有主機密碼相同,或 root 用戶密碼相同
- 所有主機開放22端口,或者指定端口
1.安裝 sshpass
sudo apt update sudo apt install sshpass
2.準備主機列表文件
創(chuàng)建一個名為 hosts.txt 的文件:
vim hosts.txt
格式如下:
root@10.80.14.10 root@10.80.14.13 root@10.80.14.25 root@10.80.14.28 root@10.80.14.34 root@10.80.14.37 root@10.80.14.40 root@10.80.14.43 root@10.80.14.68 root@10.80.14.72 root@10.80.14.75 root@10.80.14.78 root@10.80.14.81 root@10.80.14.87 root@10.80.14.106 root@10.80.14.110 root@10.80.14.113 root@10.80.14.116 root@10.80.14.122 root@10.80.14.125 root@10.80.14.131 root@10.80.14.140 root@10.80.14.143 root@10.80.14.146
如果沒有指定用戶名,下面的腳本會默認使用 root 用戶。
3.創(chuàng)建一個批處理腳本
#!/bin/bash
# 配置參數(shù)
SOURCE_PATH="./talimu/bak_run_docker.sh" # 要傳輸?shù)脑次募?文件夾
DEST_PATH="/home/yy/talimu/talimu" # 目標路徑
HOSTS_FILE="hosts.txt" # 主機列表文件(格式:username@host)
PASSWORD="你的密碼" # SSH密碼
SSH_PORT="22" # SSH端口號,默認開放22
LOG_DIR="transfer_logs_$(date +%Y%m%d_%H%M%S)"
# 創(chuàng)建日志目錄
mkdir -p $LOG_DIR
# 檢查文件是否存在
if [ ! -e "$SOURCE_PATH" ]; then
echo "錯誤:源文件/文件夾不存在"
exit 1
fi
if [ ! -f "$HOSTS_FILE" ]; then
echo "錯誤:主機列表文件不存在"
exit 1
fi
# 統(tǒng)計總主機數(shù)
total=$(wc -l < "$HOSTS_FILE")
current=0
success=0
failed=0
echo "開始傳輸,總計 $total 臺主機..."
echo "使用端口: $SSH_PORT"
# 讀取主機列表并傳輸
while IFS= read -r line; do
current=$((current + 1))
# 如果行包含@,則分割用戶名和主機地址
if [[ $line == *"@"* ]]; then
username=$(echo $line | cut -d'@' -f1)
host=$(echo $line | cut -d'@' -f2)
else
# 如果沒有指定用戶名,使用默認用戶root
username="root"
host=$line
fi
echo "[$current/$total] 正在傳輸?shù)?$username@$host..."
if [ -d "$SOURCE_PATH" ]; then
sshpass -p "$PASSWORD" scp -P $SSH_PORT -r -o StrictHostKeyChecking=no \
"$SOURCE_PATH" "$username@$host:$DEST_PATH" \
>> "$LOG_DIR/success.log" 2>> "$LOG_DIR/errors.log"
else
sshpass -p "$PASSWORD" scp -P $SSH_PORT -o StrictHostKeyChecking=no \
"$SOURCE_PATH" "$username@$host:$DEST_PATH" \
>> "$LOG_DIR/success.log" 2>> "$LOG_DIR/errors.log"
fi
if [ $? -eq 0 ]; then
echo "? $username@$host 傳輸成功"
success=$((success + 1))
else
echo "? $username@$host 傳輸失敗"
failed=$((failed + 1))
fi
echo "----------------------------------------"
done < "$HOSTS_FILE"
# 顯示傳輸結(jié)果統(tǒng)計
echo -e "\n傳輸完成!"
echo "成功:$success"
echo "失?。?failed"
echo "詳細日志保存在:$LOG_DIR/"
到此這篇關(guān)于Ubuntu向多臺主機批量傳輸文件的流程步驟的文章就介紹到這了,更多相關(guān)Ubuntu向多臺主機批量傳輸文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在CentOS VPS上通過SSH安裝 MySQL的方法圖解
這篇文章主要介紹了在CentOS VPS上通過SSH安裝 MySQL,需要的朋友可以參考下2018-12-12
smarty實現(xiàn)PHP靜態(tài)化的兩種方法分享
用smarty實現(xiàn)純靜態(tài)化的文件發(fā)布有兩種方法,也就是純HTML文件生成的方法,包括以下兩種方法,需要的朋友可以參考下2012-02-02
詳解CentOS7使用firewalld打開關(guān)閉防火墻與端口
本篇文章主要介紹了CentOS7使用firewalld打開關(guān)閉防火墻與端口,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-01-01
在 Ubuntu 15.04/CentOS 7 中安裝 Lighttp
以下是我們在運行 Ubuntu 15.04 或 CentOS 7 Linux 發(fā)行版的機器上安裝 Lighttpd Web 服務(wù)器的簡要流程,需要的朋友可以參考下2017-04-04

