一.问题

场景:生产上线,数据备份

有时候我们需要将多个文件远程拷贝到多个服务器

方案:

1.scp命令,将单个文件拷贝到单个服务器方便

2.用ftp的工具,可以一次将多个文件选中拷贝到一台服务器,但是当面临多个文件多个服务器时,也是需要多次执行

那么有什么方法可以一次性就将多个文件拷贝到多个服务器呢.

二.命令

sscp命令

命令的脚本我放在最后了,先看使用的效果

1.帮助文档

命令:

sscp -h

结果

作用: 用于远程拷贝文件(可试用于多个文件,多个服务器)
用法: sscp [选项]-s          源文件或文件夹(文件夹下所有的文件将会拷贝)-d          目标服务器ip或(服务器信息文件)-l          目标服务器路径-n          单个目标服务器的用户名-p          单个目标服务器的密码-S          在当前目录生成目标服务器信息文件-h          帮助文档示例:
1.拷贝单个文件到单个服务器:sscp -s a.txt -d 192.168.9.100 -l /data/ -n root -p 1234562.生产服务器信息文件:格式(ip 路径 用户名 密码)sscp -S3.拷贝多个文件到多个服务器:sscp -s /test/ -d ./destServer.txt

2.单个文件拷贝到单个服务器

命令:

sscp -s a.txt -d 192.168.9.101 -l /data/ -n root -p 

结果:(这里密码我没有在命令中指定,而是隐性输入的,包括ip,路径,用户名都可以隐形输入)

服务器密码:
等待传输......
=======================开始===================
a.txt------------------>192.168.9.101  OK!
传输完成!---总共:01条记录---成功:01条记录---失败:0条记录---!
日志路径:/tmp/sscp.log
=======================结束===================

这里,大家会发现,这条命令虽然能远程拷贝,但是我为什么不直接用scp呢,scp还简单些!

确实:如果是单个文件到单个服务器,真没必要用这个命令

3.生成服务器信息文件

命令:

sscp -S

结果:

文件生成完成!!!

会发现在当前目录,生成了一个 destServer.txt 的文件,文件内容

192.168.9.100 /data/ root abc123456
192.168.9.101 /data/ root abc123456

内容格式: 服务器ip  服务器路径 用户名 密码

4.多个文件到多个服务器

命令:

test/为目录.目录下面有多个文件b.txt,c.txt

destServer.txt保存着我们要传输服务器的信息

sscp -s test/ -d destServer.txt

结果:

=======================开始===================
test/b.txt------------------>192.168.9.100  OK!
test/b.txt------------------>192.168.9.101  OK!
test/c.txt------------------>192.168.9.100  OK!
test/c.txt------------------>192.168.9.101  OK!
传输完成!---总共:4条记录---成功:4条记录---失败:0条记录---!
日志路径:/tmp/sscp.log
=======================结束===================

这时候我们,去服务器上查看,会发现两个文件均传到两个服务器了.

两个服务器不算多,当如果我们有几十个上百个服务器需要相同的文件时,我们也只需要将服务器的信息保存在服务器信息文件中即可.

当然:如果单个文件到多个服务器,多个文件到单个服务器,都是可以通过该命令一条完成.这大大节约了我们的文件传输操作步骤.

当然一个非常完善的系统,可能早就已经有各种自动化工具进行部署,但是当面临新的系统时,总避免不了手动去传输.

三.创建命令

1.

cd /usr/local/bin/

2.

vim sscp
#!/bin/bash#帮助文档
function help(){echo "作用: 用于远程拷贝文件(可试用于多个文件,多个服务器)"echo "用法: sscp [选项]"echo ""echo "   -s          源文件或文件夹(文件夹下所有的文件将会拷贝)"echo "   -d          目标服务器ip或(服务器信息文件)"echo "   -l          目标服务器路径" echo "   -n          单个目标服务器的用户名"echo "   -p          单个目标服务器的密码"echo "   -S          在当前目录生成目标服务器信息文件"echo "   -h          帮助文档"     echo ""     echo "示例:"echo "1.拷贝单个文件到单个服务器:" echo "                sscp -s a.txt -d 192.168.9.100 -l /data/ -n root -p 123456"echo ""echo "2.生产服务器信息文件:格式(ip 路径 用户名 密码)"echo "                sscp -S"echo ""echo "3.拷贝多个文件到多个服务器:"echo "                sscp -s /data/ -d ./destServer.txt"exit 1
}#目标服务器信息文件生成
function destServerFile(){if [[ -f destServer.txt ]]; thenrm -f destServer.txtfitouch destServer.txtecho "192.168.9.100 /data/ root abc123456" >> destServer.txtecho "192.168.9.101 /data/ root abc123456" >> destServer.txtecho "文件生成完成!!!" exit 0
}#参数检查
function argVolidate(){ #参数个数为0个,直接输出帮助文档if [[ $# == 0 ]] || [[ $# -gt 10 ]]; thenecho "[error]:参数错误!!!"help fi#参数为-hif [[ $# == 1 ]] && [[ $1 == "-h" ]]; thenhelpfi#参数个数为1个,则参数必须为-S,-h,--helpif [[ $# == 1 ]]; thenif [[ $1 != "-S" ]]; thenecho "[error]:参数错误!!!"helpelsedestServerFilefifi#参数个数为2及2个以上,则参数只能为-s,-d,-n,-p,且参数不大于8个argIndex=0for arg in $* dolet argIndex+=1argNum=$((argIndex%2))if [[ $argNum != 0 ]] && [[ $arg != "-s" ]] && [[ $arg != "-d" ]] && [[ $arg != "-l" ]] && [[ $arg != "-n" ]] && [[ $arg != "-p" ]]; thenecho "[error]:参数错误!!!"help   fidone
}#数据解析
function parse(){argIndex=0argValue=""for arg in $*dolet argIndex+=1argNum=$((argIndex%2))case $argValue in"-s")src=$arg;;"-d")dest=$arg;;"-l")destDir=$arg;;"-n")name=$arg;;"-p")password=$arg;;*)argvalue="";;esacargValue=""if [[ $argNum != 0 ]]; thenif [[ $arg == "-s" ]] || [[ $arg == "-d" ]] || [[ $arg == "-l" ]] || [[ $arg == "-n" ]] || [[ $arg == "-p" ]]; thenargValue=$argfifidone}#检查用户需要输入的信息
function inputVolidate(){if [[ $dest == "" ]]; thenecho "请输入目标服务器ip:"read dest fiif [[ ! -f $dest ]]; thenif [[ $destDir == "" ]]; thenecho "服务器路径:"read  destDirfiif [[ $name == "" ]]; thenecho "服务器用户名:"read  namefi if [[ $password == "" ]]; thenecho "服务器密码:"read -s passwordecho "等待传输......"fifi
}#传输方法
#参数:第一个:源文件,第二个:目标服务器用户名,第三个:目标服务器ip,第四个:目标服务器地址,第五个目标服务器密码
function scpStreng(){sshpass -p $5 scp -p $1 $2@$3:$4 >/tmp/sscp.log  2>&1result=$?if [[ $result == 0 ]]; thenecho "$1------------------>$3  OK!" let success=$success+1elseecho "$1------------------>$3  fail!"let faild=$faild+1fi let total=$faild+1
}#单个文件传输
#参数:第一个:源文件,第二个:用户输入的服务器用户名,第三个:目标服务器ip,第四个:目标服务器地址,第五个目标服务器密码
function singelFile(){if [[ $name != "" ]]; thenecho "直接chuansh"scpStreng $src $name $dest $destDir $passwordelsehosts=$(awk 'END{print NR}' $dest)i=1while [[ i -le $hosts ]]dohostIp=$(sed -${i} $dest |awk -F ' ' '{print $1}')hostDir=$(sed -${i} $dest |awk -F ' ' '{print $2')hostName=$(sed -${i} $dest |awk -F ' ' '{print $3}')hostPassword=$(sed -${i} $dest |awk -F ' ' '{print $4}')scpStreng $src $hostName $hostIp $hostDir $hostPasswordlet i+=1donefi
}argVolidate $*#全局变量
src=""
dest=""
destDir=""
name=""
password=""total=0
faild=0
success=0parse $*echo "$name"inputVolidate#传输开始
echo "=======================开始==================="
if [[ -f $src ]]; thenif [[ $name != "" ]]; thenscpStreng $src $name $dest $destDir $passwordelsehosts=$(awk 'END{print NR}' $dest)i=1while [[ i -le $hosts ]]dohostIp=$(sed -n ${i}p $dest |cut -f 1 -d ' ')hostDir=$(sed -n ${i}p $dest |cut -f 2 -d ' ')hostName=$(sed -n ${i}p $dest |cut -f 3 -d ' ')hostPassword=$(sed -n ${i}p $dest |cut -f 4 -d ' ')scpStreng $src $hostName $hostIp $hostDir $hostPasswordlet i+=1donefi
elsefor file in `ls $src`donowSrc=$src$fileif [[ $name != "" ]]; thenscpStreng $nowSrc $name $dest $destDir $passwordelsehosts=$(awk 'END{print NR}' $dest)i=1while [[ i -le $hosts ]]dohostIp=$(sed -n ${i}p $dest |cut -f 1 -d ' ') hostDir=$(sed -n ${i}p $dest |cut -f 2 -d ' ')hostName=$(sed -n ${i}p $dest |cut -f 3 -d ' ')hostPassword=$(sed -n ${i}p $dest |cut -f 4 -d ' ')scpStreng $nowSrc $hostName $hostIp $hostDir $hostPasswordlet i+=1donefidone
fi#传输完成
echo "传输完成!---总共:${total}条记录---成功:${success}条记录---失败:${faild}条记录---!"
echo "日志路径:/tmp/sscp.log"
echo "=======================结束==================="

3.

chmod 755 sscp

4.

接下来就可以使用了

远程拷贝多个文件到多个服务器怎么快速处理相关推荐

  1. 云服务器怎么拷贝和删除文件,怎样给云服务器拷贝文件

    怎样给云服务器拷贝文件 内容精选 换一换 本章节主要介绍云硬盘.弹性文件服务.对象存储服务等存储服务,让您更好的了解这些存储服务. 云服务器备份:云服务器备份可以对普通服务器进行整机备份或部分磁盘备份 ...

  2. CentOS常见命令之远程拷贝(scp)

    1. 背景 作为后端开发或者运维工程师,服务器是我们必须牢牢掌握的一门技术.这小节中我们主要探究ContOS7下远程拷贝文件的用法和示例. 说起CentOS中拷贝,我们最常使用的就是cp 命令了,其格 ...

  3. linux中使用scp远程拷贝文件及文件夹

    linux中使用scp远程拷贝文件及文件夹 linux scp远程拷贝文件及文件夹,需要的朋友可以参考下 1.拷贝本机/home/wtf/test整个目录至远程主机192.168.100.1的/roo ...

  4. Linux远程拷贝下载文件

    ftp命令: 服务器有安装ftp Server,另外一台linux可以使用ftp的client程序来进行文件的拷贝读取和下载. 1. 连接ftp服务器 格式:ftp [hostname| ip-add ...

  5. linux c语言文件拷贝_linux - 远程拷贝文件之scp

    简介 scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证. scp只要通过sshd服务进行通讯,而且要求两端都有sc ...

  6. centos 7.9 scp命令 实现远程拷贝文件

    1.说明 Linux scp 命令用于 Linux 之间复制文件和目录. scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令. s ...

  7. scp命令 – 远程拷贝文件

    scp命令 – 远程拷贝文件 SCP概述 一.格式 二.参数 三.实例 SCP概述 scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linu ...

  8. SSH远程链接:SCP远程拷贝文件与文件夹

    scp是ssh的一部分,可以进行远程文件拷贝. 下面以本地A和远程机器B为例介绍: 首先本地A: 用户名为rongtao,ip地址为:180.201.178.4 远程机器B的信息如下: 远程用户名To ...

  9. 从远程服务器拷贝文件命令,远程拷贝文件命令Scp的使用

    scp通过网络在两台主机之间拷贝文件,数据在传输过程中是经过加密的,其底层使用ssh来进行数据传输,并且它和ssh有相同的验证机制和同样的安全级别.当使用scp拷贝一个文件到另一台主机上的时候,如果目 ...

最新文章

  1. 苹果服务器修改主目录就打不开,苹果应用商店又挂了 App Store打不开怎么修复...
  2. leetcode 454 四数相加
  3. ffmpeg4 读取图片编码
  4. 没有事业的女朋友(一个老总的感言)
  5. Git中的日常使用 码云
  6. Android 串口开发,发送串口命令,读卡,反扫码,USB通讯,实现demo。——持续更新
  7. jmeter练习(5)关联升级版—ForEach控制器(提取多个响应结果并依次传参)
  8. c语言读取nc文件格式,nc文件资料地读取与处理.doc
  9. Linux下的防火墙管理(包含图形和命令、伪装和转发)
  10. 智能一代云平台(四):15年上半年维护过程中精彩小插曲
  11. python 摄像头采集_Python+OpenCV采集本地摄像头的视频
  12. Web前端开发规范手册 1
  13. Facebook主页如何一键邀请加粉
  14. 陀螺仪传感器维特智能WT901JY901九轴传感器受金属干扰的解决方法。九轴陀螺仪、九轴传感器、磁场计、姿态感应器
  15. J2PaaS低代码开发平台——信息化系统的流水线工厂
  16. 2021年 全网最细 Windows 系统安装虚拟机Vmware15 及 CentOS7系统和远程登录
  17. visual studio 错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include StdAfx.h”?
  18. android+usb+摄像头+app+开源,Android 使用摄像头拍照
  19. 超全MySQL学习笔记,416页满满知识,看完再也不怕学不会了
  20. a股行情接口功能特点

热门文章

  1. 华为OD机试真题 Java 实现【任务调度】【2022.11 Q4 新题】
  2. Android 超好用的播放器ijkplayer
  3. 参考文献起止页码怎么写_参考文献中引用了专著中的某一句话,起止页码该如何写?...
  4. linux 添加163源,CentOS 6 添加网易163源
  5. Adversarial Visual Robustness by Causal Intervention
  6. 扒一扒Lombok的@Slf4j注解,我发现还有点意思。
  7. error: failed to push some refs to ‘git@github.com:‘问题解决
  8. c语言编黑白棋游戏,怎样编制黑白棋(2)
  9. 论文图片格式转化工具
  10. ios上架及证书最新申请流程