批量将RHEL 7单台虚拟机文件传输至其他10台虚拟机的简便方法咨询
批量将RHEL 7单台虚拟机文件传输至其他10台虚拟机的简便方法咨询
嗨,重复按上箭头改VM编号确实够折腾的!给你几个实用的批量操作办法,能帮你省不少时间:
先搞定SSH免密登录(关键前提)
要是每次SCP都输密码,批量操作也会卡壳,先给目标VM配置免密:- 在你有权限的VM上生成SSH密钥:
ssh-keygen -t rsa,一路回车默认设置就行 - 把公钥传到每台目标VM:
ssh-copy-id your_username@vm-XX(第一次需要输入目标VM的密码,之后就不用输了)
- 在你有权限的VM上生成SSH密钥:
用Bash循环脚本批量传输
假设你的VM是按编号命名的(比如vm-2到vm-11,你当前在vm-1),写个简单脚本就行:#!/bin/bash # 替换成你要传输的文件路径 SOURCE_FILE="/home/your_username/important_file.tar.gz" # 替换成目标VM的用户名 TARGET_USER="your_username" # 替换成目标VM的编号范围和文件存放路径 for VM_NUM in {2..11}; do scp $SOURCE_FILE $TARGET_USER@vm-$VM_NUM:/home/$TARGET_USER/ done保存成
batch_scp.sh,给它加执行权限:chmod +x batch_scp.sh,然后运行./batch_scp.sh就自动传完所有VM了。不想写脚本?直接用命令行一行循环
要是只是临时用一次,不用写脚本,直接在终端敲:for VM_NUM in {2..11}; do scp /home/your_username/important_file.tar.gz your_username@vm-$VM_NUM:/home/your_username/; done
同样要先配好免密,不然会一次次弹窗要你输密码。如果不能配免密?试试sshpass工具
要是暂时没法配免密,先安装sshpass:sudo yum install sshpass,然后用带密码的循环脚本:#!/bin/bash SOURCE_FILE="/home/your_username/important_file.tar.gz" TARGET_USER="your_username" # 注意:明文写密码不安全,用完记得删掉脚本 TARGET_PASS="your_vm_password" for VM_NUM in {2..11}; do sshpass -p $TARGET_PASS scp $SOURCE_FILE $TARGET_USER@vm-$VM_NUM:/home/$TARGET_USER/ done更安全的做法是先设置环境变量:
export SSHPASS="your_vm_password",然后脚本里用sshpass -e scp ...,避免密码明文出现在脚本里。灵活版:用VM列表文件批量传
要是VM编号没规律,把所有目标VM的IP或主机名写到一个vm_list.txt文件里(每行一个),然后用这个脚本:#!/bin/bash SOURCE_FILE="/home/your_username/important_file.tar.gz" TARGET_USER="your_username" while read VM_ADDR; do scp $SOURCE_FILE $TARGET_USER@$VM_ADDR:/home/$TARGET_USER/ done < vm_list.txt不管VM叫什么名字,只要列在文件里就能自动传输。
备注:内容来源于stack exchange,提问作者Colin O'Brien




