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

2025-09-25 12:50

本文主要是介绍Ubuntu向多台主机批量传输文件的流程步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信...

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向多台主机批量传输文件内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Ubuntu向多台主机批量传输文件的流程步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156028

相关文章

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx