开发者

Ubuntu向多台主机批量传输文件的流程步骤

开发者 https://www.devze.com 2025-09-26 09:56 出处:网络 作者: Tangineer
目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚本ubuntu 向多台主机批python量传输文件
目录
  • Ubuntu 向多台主机批量传输文件
    • 1.安装 sshpass
    • 2.准备主机列表文件
    • 3.创建一个批处理脚本

ubuntu 向多台主机批python量传输文件

前提:

  • 主机之间可以相互通信
  • 所有python主机用户名相同,或开放 ssh root 用户远程连接权限
  • 所有主机密码相同,或 root 用户密码相同
  • 所有主机开放22端口,或者指定端口

1.安装 sshpass

sudo apt update
sudo apt install sshpass

2.准备主机列表文件

创建一个名为 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.创建一个批处理脚本

#!/bin/bash

# 配置参数
SOURCE_PATH="./talimu/bak_run_docker.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)"

# 创建日志目录
mkdir -p $LOG_DIR

# 检查文件是否存在
if [ ! -e "$SOURCE_PATH" ]; then
    echo "错误:源文件/文件夹不存在"
    exit 1
fi

if [ ! -f "$HOSTS_FILE" ]; then
    echo "错误:主机列表文件不存在"
    exit 1
fi

# 统计总主机数
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 javascript"[$current/$total] 正在传输到 $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"

# 显示传输结果统计
echo -e "\n传输完成!"
echo "成功:$success"
echo "失败:$failed"
echo "详细日志保存在:$LOG_DIR/"

到此这篇关于Ubuntu向多台主机批量传输文件的流程步骤的文章就介绍到这了,更多相关Ubuntu向多台主机批量传输文件内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号