本文主要是介绍Ubuntu向多台主机批量传输文件的流程步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信...
ubuntu 向多台主机批python量传输文件
前提:
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向多台主机批量传输文件的流程步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!