Skip to content

Instantly share code, notes, and snippets.

@freelze
Created July 18, 2025 01:38
Show Gist options
  • Save freelze/b1c0de9cb060566726148c4a5aae725e to your computer and use it in GitHub Desktop.
Save freelze/b1c0de9cb060566726148c4a5aae725e to your computer and use it in GitHub Desktop.
#!/bin/bash
# --- 設定區 ---
# 要讀取的檔案名稱
INPUT_FILE="IP_table.txt"
# 要使用的 IP 位在第幾個欄位 (column)
IP_COLUMN=2
# 要傳送的本地檔案名稱
SOURCE_FILE="stress_cpu.sh"
# 檔案要傳送到遠端主機的哪個目錄下 (請確保目錄存在)
# /root/ 是 root 使用者的家目錄
DESTINATION_PATH="/root/"
# 遠端主機的登入密碼
PASSWORD='YOUR_PASSWORD!!!!!!!!!'
# 遠端主機的登入使用者
REMOTE_USER="root"
# --- 主程式 ---
# 檢查 IP_table.txt 是否存在
if [ ! -f "$INPUT_FILE" ]; then
echo "錯誤: 找不到 IP 表格檔案 '$INPUT_FILE'"
exit 1
fi
# 檢查要傳送的本地檔案是否存在
if [ ! -f "$SOURCE_FILE" ]; then
echo "錯誤: 找不到要傳送的來源檔案 '$SOURCE_FILE'"
exit 1
fi
# 檢查 sshpass 是否已安裝
if ! command -v sshpass &> /dev/null; then
echo "錯誤: sshpass 指令未找到。"
echo "請先安裝 sshpass (例如: sudo apt-get install sshpass 或 sudo yum install sshpass)"
exit 1
fi
echo "開始批次傳送檔案 '$SOURCE_FILE'..."
echo "=========================================="
# 逐行讀取 IP_table.txt
while IFS= read -r line
do
# 跳過空白行或以'#'開頭的註解行
if [[ -z "$line" || "$line" =~ ^# ]]; then
continue
fi
# 使用 cut 指令以','為分隔符,取出指定欄位的 IP
ip=$(echo "$line" | cut -d',' -f$IP_COLUMN)
# 檢查是否成功取到 IP
if [ -z "$ip" ]; then
echo "警告: 在行 '$line' 中無法取得第 $IP_COLUMN 欄位的 IP,跳過此行。"
continue
fi
echo "--- 正在傳送檔案到主機: $ip ---"
# 使用 sshpass 和 scp 傳送檔案
# scp 也會使用 ssh 連線,所以同樣可以使用 -o 選項
sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SOURCE_FILE" ${REMOTE_USER}@${ip}:${DESTINATION_PATH}
# 檢查上一個指令的返回碼,判斷是否成功
if [ $? -eq 0 ]; then
echo "--- 檔案已成功傳送到 $ip:${DESTINATION_PATH} ---"
else
echo "--- 錯誤: 傳送檔案到 $ip 時發生問題 ---"
fi
echo "" # 輸出一個空行,方便閱讀
done < "$INPUT_FILE"
echo "=========================================="
echo "所有檔案傳送操作已處理完畢。"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment