前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >for循环+scp一行命令实现推送文件到批量远程服务器

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

作者头像
大刚测试开发实战
发布2022-11-14 14:21:08
1.2K0
发布2022-11-14 14:21:08
举报
文章被收录于专栏:大刚测试开发实战

背景

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

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

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

代码语言:javascript
复制
scp /usr/bin/tarll root@192.168.16.2:/usr/bin/

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

代码语言:javascript
复制
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服务器生成秘钥对文件

代码语言:javascript
复制
# 在A服务器生成秘钥对文件
ssh-keygen -t rsa

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

代码语言:javascript
复制
# B、C、D内网地址分别为16网段下的2、3、4
cd ~/.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传过来的公钥文件添加到信任服务器文件

代码语言:javascript
复制
cd ~/.ssh/
cat id_rsa.pub >>authorized_keys

二、Linux下for循环用法

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

1、类c语言

代码语言:javascript
复制
for ((i=1; i<=100; i ++))  
do  
    echo $i  
done 

2、in

代码语言:javascript
复制
for i in {1..100}  
do  
    echo $i  
done  

3、seq

代码语言:javascript
复制
for i in `seq 1 100`  
do  
    echo $i  
done 

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

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

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

代码语言:javascript
复制
# 以类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的方式来实现:

代码语言:javascript
复制
# 以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脚本文件中,并定义一些变量来接收参数,以实现更灵活的批量复制指定文件到指定的服务器

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档