for循环+scp一行命令实现批量推送文件到多台远程服务器

简介: for循环+scp一行命令实现批量推送文件到多台远程服务器

背景


上周记录和分享了Linux下实现自定义命令行工具小技巧、实现批量解压压缩包的操作实践。A服务器上完成该命令工具后,我在其他服务器也想要使用这个命令。因为其他服务器都在同一内网下,因此想要使用此命令,有两种方案:

  • 1、在每台服务器上都如是操作实现一遍该命令
  • 2、将A服务器上的脚本文件分别复制到其他服务器上

第一种不做赘述,本次介绍的是采用第二种通过scp远程复制的方式:

scp /usr/bin/tarll root@192.168.16.2:/usr/bin/

但此种方式也同样面临一个问题,因为有多台服务器,所以需要执行多遍scp的远程复制命令:

scp /usr/bin/tarll root@192.168.16.2:/usr/bin/
scp /usr/bin/tarll root@192.168.16.3:/usr/bin/
......
scp /usr/bin/tarll root@192.168.16.n:/usr/bin/

尽管我们可以通过键盘的↑按键回滚到前一个命令、仅仅需要改一个IP地址那么简单,但来回多次回滚,也颇为繁琐。在此背景下,就可以通过for循环来实现批量复制。

一、各服务器之间建立信任关系(免密登录)

值得注意的是,如果想要实现A服务器上的文件远程快速、批量复制到同一内网下的B、C、D等服务器,就需要A服务器和B、C、D等服务器之间建立信任关系(在此之前由于安装其他软件的需要,我已建立好,否则scp命令执行过程中还需要一遍遍输入密码、也并不省力气)。此处简单介绍一下建立信任关系的实现过程:

1.在A服务器生成秘钥对文件

# 在A服务器生成秘钥对文件ssh-keygen -t rsa

2.将公钥文件分别复制到其他服务器的~/.ssh目录下

# B、C、D内网地址分别为16网段下的2、3、4cd ~/.ssh/scp id_rsa.pub root@192.168.16.2
scp id_rsa.pub root@192.168.16.3
scp id_rsa.pub root@192.168.16.4
...

3.在其他服务器上分别将A传过来的公钥文件添加到信任服务器文件

cd ~/.ssh/
cat id_rsa.pub >>authorized_keys

二、Linux下for循环用法

要想实现一行命令即推送文件到多台远程服务器,还需要借助for循环。shell中for循环有多种形式用法:

1、类c语言

for ((i=1; i<=100; i ++))  
doecho$idone

2、in

for i in {1..100}  
doecho$idone

3、seq

for i in`seq 1 100`doecho$idone

 

三、for循环+scp实现推送到批量远程服务器

目的:将/usr/bin目录下的tarall文件分别复制到同一内网下的其他几台服务器上

① 由于我需要接收文件的几台服务器地址分别为:192.168.16.2、192.168.16.3、192.168.16.4...192.168.16.10,IP地址最后一位为有规律、自增的情况,因此,上述三种循环方式均可采用:

# 以类c语言的for循环方式为例实现批量远程复制for ((i=2;i<=10;i++));do scp /usr/bin/tarall root@192.168.16.$i:/usr/bin/;done

② 如果服务器的IP地址为非自增的情况,如:192.168.16.5、192.168.16.7、192.168.16.14、192.168.16.20,则可以使用for循环in的方式来实现:

# 以in方式为例for i in {5,7,14,20};do scp /usr/bin/tarall root@192.168.16.$i:/usr/bin/;done

小结


以上就是通过for循环+scp一行命令实现复制文件到批量远程服务器的过程。涉及:

  • 各服务器之间如何建立信任关系;
  • scp命令用法;
  • shell中的for循环;

整体过程比较简单,当然,以上命令也可以写在shell脚本文件中,并定义一些变量来接收参数,以实现更灵活的批量复制指定文件到指定的服务器

相关文章
|
3月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
112 9
|
29天前
|
存储 安全 网络安全
服务器感染了.baxia勒索病毒,如何确保数据文件完整恢复?
近年来,勒索病毒如.baxia不断演变,利用漏洞、社交工程等手段加密文件,威胁范围扩大。加密货币的兴起使其支付方式更匿名,追踪困难。技术支持尤为重要,添加技术服务号(shuju315),专业团队提供数据恢复方案。面对复杂解密要求,包括赎金支付、个人信息提供和执行特定操作,需保持冷静并寻求帮助。防御措施包括加强安全意识、定期备份数据、安装杀毒软件、避免未知文件、更新系统及制定应急响应计划。
70 11
|
1月前
|
运维
阿里云服务器批量执行命令(系统运维管理oos)
阿里云【系统运维管理oos】批量执行详情
51 5
|
4月前
|
监控 Linux Shell
|
4月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
54 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
4月前
|
弹性计算 安全 Linux
阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
|
4月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
73 1
|
4月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
1062 0
|
2天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
3天前
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。

热门文章

最新文章