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向多台主机批量传输文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Ubuntu22.04系统:fatal: 无法连接到 github.com
这篇文章主要介绍了Ubuntu22.04系统:fatal: 无法连接到 github.com的相关资料,需要的朋友可以参考下2024-03-03
ubuntu无法ssh远程,提示'Permission denied (publickey
SSH(Secure Shell)是一种加密的网络协议,用于在网络上安全地传输数据,它被广泛用于远程登录和执行命令,有时候使用SSH登录时,可能会遇到错误消息Permission denied (publickey)导致登录失败,这种情况可能由多种原因引起,将探讨导致SSH登录失败的可能性,并提供解决方案2025-04-04
Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程)
这篇文章主要介绍了Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程),文中通过图文代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07


最新评论