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向多台主机批量传输文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
在CentOS VPS上通过SSH安装 MySQL的方法图解
这篇文章主要介绍了在CentOS VPS上通过SSH安装 MySQL,需要的朋友可以参考下2018-12-12
详解CentOS7使用firewalld打开关闭防火墙与端口
本篇文章主要介绍了CentOS7使用firewalld打开关闭防火墙与端口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-01-01
在 Ubuntu 15.04/CentOS 7 中安装 Lighttp
以下是我们在运行 Ubuntu 15.04 或 CentOS 7 Linux 发行版的机器上安装 Lighttpd Web 服务器的简要流程,需要的朋友可以参考下2017-04-04


最新评论