You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

批量将RHEL 7单台虚拟机文件传输至其他10台虚拟机的简便方法咨询

批量将RHEL 7单台虚拟机文件传输至其他10台虚拟机的简便方法咨询

嗨,重复按上箭头改VM编号确实够折腾的!给你几个实用的批量操作办法,能帮你省不少时间:

  • 先搞定SSH免密登录(关键前提)
    要是每次SCP都输密码,批量操作也会卡壳,先给目标VM配置免密:

    1. 在你有权限的VM上生成SSH密钥:ssh-keygen -t rsa,一路回车默认设置就行
    2. 把公钥传到每台目标VM:ssh-copy-id your_username@vm-XX(第一次需要输入目标VM的密码,之后就不用输了)
  • 用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工具
    要是暂时没法配免密,先安装sshpasssudo 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

火山引擎 最新活动