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

 更新时间:2025年09月25日 10:17:36   作者:Tangineer  
这篇文章主要介绍了在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信息的hosts.txt文件,并编写批处理脚本实现自动化传输,需要的朋友可以参考下

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向多台主机批量传输文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下Makefile的编写与使用详解

    Linux下Makefile的编写与使用详解

    大家好,本篇文章主要讲的是Linux下Makefile的编写与使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Ubuntu22.04系统:fatal: 无法连接到 github.com

    Ubuntu22.04系统:fatal: 无法连接到 github.com

    这篇文章主要介绍了Ubuntu22.04系统:fatal: 无法连接到 github.com的相关资料,需要的朋友可以参考下
    2024-03-03
  • Centos7设置postgresql数据库开机自启动方式

    Centos7设置postgresql数据库开机自启动方式

    本文介绍了在Linux系统上配置PostgreSQL开机自启动的方法,包括复制启动脚本、修改环境变量以及设置开机启动等步骤
    2026-05-05
  • ubuntu无法ssh远程,提示'Permission denied (publickey)'的解决方法

    ubuntu无法ssh远程,提示'Permission denied (publickey

    SSH(Secure Shell)是一种加密的网络协议,用于在网络上安全地传输数据,它被广泛用于远程登录和执行命令,有时候使用SSH登录时,可能会遇到错误消息Permission denied (publickey)导致登录失败,这种情况可能由多种原因引起,将探讨导致SSH登录失败的可能性,并提供解决方案
    2025-04-04
  • Ubuntu14.04搭建Caffe(仅CPU)详解教程

    Ubuntu14.04搭建Caffe(仅CPU)详解教程

    这篇文章主要介绍了Ubuntu14.04搭建Caffe(仅CPU)详解教程,操作系统是Ubuntu 14.04,本文分步骤给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Linux实现搭建ssh并允许使用root远程

    Linux实现搭建ssh并允许使用root远程

    这篇文章主要介绍了Linux实现搭建ssh并允许使用root远程方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 快速解决linux下中文输入法问题

    快速解决linux下中文输入法问题

    这篇文章主要介绍了linux下中文输入法问题及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • linux环境不使用hadoop安装单机版spark的方法

    linux环境不使用hadoop安装单机版spark的方法

    今天小编就为大家分享一篇关于linux环境不使用hadoop安装单机版spark的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 详解Linux如何生成随机数字和字符串

    详解Linux如何生成随机数字和字符串

    本篇文章主要介绍了详解Linux如何生成随机数字和字符串,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程)

    Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程)

    这篇文章主要介绍了Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程),文中通过图文代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论