【shell】scp 同时向多个主机拷贝数据

目录

法1:scp命令扩展

法2:主机ip放到hostlist文件里

免密登录设置方法


法1:scp命令扩展

脚本:

vim ./scp_ex.sh

#!/bin/sh

arg_index=0
start_index=0
all_arg=($*)   #($*)  all args

for arg in $@
do

 ((arg_index++))
 dot_num=$(echo $arg |awk -F '.' '{print NF-1}')

 if [ ${dot_num} -eq 3 ]; then          #182.200.31.55 IP addr has 3 dots
    start_index=${arg_index}
    break
 fi

done


if [ $start_index -eq 0 ]; then
  echo "No host,exit."
fi


arg_index=1  #arg index is start from 1


while [ $arg_index -lt $start_index ]   #-lt less then
do
      arg_arr[$arg_index - 1]=${all_arg[$arg_index - 1]}
      ((arg_index++))
done


while [ $start_index -le $# ]           #-le less then or equel to
do
  echo "scp "${arg_arr[@]}  ${@:$start_index:1}
  scp ${arg_arr[@]}  ${@:$start_index:1}
  let start_index++
done

用法:

用法和scp一样,只是后面的可以跟多个主机:

./scp_ex.sh -r ./hostlist  182.200.31.58:/home/lcx  182.200.31.57:/home/lcx

shell脚本获取第n个参数:

${@:n:1}

参数数组:

https://blog.csdn.net/bandaoyu/article/details/113770557

法2:主机ip放到hostlist文件里

转自:linux主机同时向多台主机拷贝文件:scp_all_nodes - 知乎

步骤如下:

  1. 在需要执行runcmd主机使用publickey免密登录所有主机(包括该主机自己),参考之前笔记或者百度(参考上篇run_cmd)
  2. 在该主机新建一个hostlist文件来记录所有需要执行指令的主机ip。
[root@master work]# pwd
/opt/k8s/work                    #当前目录
[root@master work]# cat hostlist 
192.168.63.120
192.168.63.121
192.168.63.122

3. 新建scp_all_nodes,脚本如下

[root@master ~]# cat /work/scp_all_nodes 

#!/bin/bash
scp_all_nodes () 
{ 
    local hostlist=`cat /opt/k8s/work/hostlist | awk '{ print $1 }'`;
    for host in $hostlist;
    do
        echo "coping to =================>"$host
        scp -r -o StrictHostKeyChecking=no -o ConnectTimeout=2  "$1" root@[$host]:/"$2"  ;
    done
}
scp_all_nodes $1 $2
 

oStrictHostKeyChecking=no 参数

应用在脚本当中,避免使用域名链接服务器的时候,检查knows_hosts文件

4. 添加执行权限

[root@master work]# chmod +x /work/scp_all_nodes 

5.用法:

scp_all_nodes /work/test1 /root  #scp_all_nodes (所要拷贝文件) (拷贝文件的目标目录)

免密登录设置方法

    参考:https://blog.csdn.net/bandaoyu/article/details/83312891

LINUX SSH免密登录
即看即用
Server A 要免密登录Server B (192.168.254.129)

在Server A 上

1、生成公钥,一路enter选择默认

ssh-keygen -t rsa 

2、公钥拷贝到Server B(192.168.254.129)上并授权

ssh-copy-id  192.168.254.129 

3、确认能免密登录

ssh  192.168.254.129

退出:logout或exit

ssh 重启命令

systemctl restart sshd.service

猜你喜欢

转载自blog.csdn.net/bandaoyu/article/details/122556576