当前位置: 代码网 > it编程>数据库>Mysql > Ubuntu向多台主机批量传输文件的流程步骤

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

2025年09月25日 Mysql 我要评论
ubuntu 向多台主机批量传输文件前提:主机之间可以相互通信所有主机用户名相同,或开放 ssh root 用户远程连接权限所有主机密码相同,或 root 用户密码相同所有主机开放22端口,或者指定端

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

前提:

  • 主机之间可以相互通信
  • 所有主机用户名相同,或开放 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 "[$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向多台主机批量传输文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com