【shell】scp 同时向多个主机拷贝数据
目录
法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 - 知乎
步骤如下:
- 在需要执行runcmd主机使用publickey免密登录所有主机(包括该主机自己),参考之前笔记或者百度(参考上篇run_cmd)
- 在该主机新建一个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
应用在脚本当中,避免使用域名链接服务器的时候,检查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