expect实现单台、多台服务器批量scp传输文件

今天公司同事要在一台服务器上对另外两台同机房的服务器进行文件传输,两台服务器的文件存放地址一致,密码和key也一致(我们公司在安全上做得有点变态的),为了效率写了下面这个脚本.

1.单台传输脚本

cat /root/soft_shell/allscp.sh

代码如下:

#!/usr/bin/expect
if {$argc < 2} {
        send_user "usage: $argv0 src_file username ip dest_file password\n"
exit
}
##set key [lindex $argv 0]
set src_file [lindex $argv 0]
set username [lindex $argv 1]
set host_ip [lindex $argv 2]
set dest_file [lindex $argv 3]
set password [lindex $argv 4]
##spawn scp -i $key $src_file $username@$host_ip:$dest_file
spawn scp  $src_file $username@$host_ip:$dest_file
expect {
        "(yes/no)?"
                {
                        send "yes\n"
                        expect "password:" {send "$password\n"}
                }
        "password:"
                {
                        send "$password\n"
                }
}
expect "100%"
expect eof

2.多台传输脚本

cat /root/soft_shell/mainscp.sh

代码如下:

#!/bin/bash
host_list="server_list.conf"
cat $host_list | while read line
do
  host_ip=`echo $line|awk '{print $1}'`
  username=`echo $line|awk '{print $2}'`
  password=`echo $line|awk '{print $3}'`
  src_file=`echo $line|awk '{print $4}'`
  dest_file=`echo $line|awk '{print $5}'`
  ##key=`echo $line|awk '{print $6}'`
  ##./allscp.sh $key $src_file $username $host_ip $dest_file $password
  ./allscp.sh $src_file $username $host_ip $dest_file $password
done

3.服务器信息文件

代码如下:

cat /root/soft_shell/server_list.conf

格式为:

代码如下:

ip 用户名 密码 源文件 目标文件地址

ps:以上3个文件,相信大家都看出来了,都是放在同一文件夹下面的.我本地测试只用ssh密码,没有加上ssh key,如果要用上跟我们公司正式环境一样的安全方式(ssh密码+key,才能登录服务器),那么请自己修改脚本文件,我比较懒这里就不说得那么详细了.

最后来张效果图吧,免得大家说我脚本有问题.

(0)

相关推荐

  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件

    一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度. 二.scp有什么用? 1.我们需要获得远程服务器上的某个文件,远程服务器既没有配置ftp服务器,没有开启web服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过scp命令便可轻松的达到目的. 2.我们需要将本机上的文件上传到远程服务器上,远程服务器没有开启ftp服务器或共享,无

  • bash scp command not found的解决方法

    安装了centos6.0,由于选择了最小安装,很多包没有安装,因此一些常用的命令也不支持,如下:# scp -bash: scp: command not found 我的解决方法是:在一台运行正常的CentOS 5.6服务器上找到scp所在的包:##---以下命令在运行正常的CentOS 5.6上执行 复制代码 代码如下: # which scp /usr/bin/scp # rpm -qf /usr/bin/scp openssh-clients-4.3p2-72.el5 这么看来scp所在

  • Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上

    Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上 今天同事想在windows上使用winscp上传文件到linux服务器上,又想偷懒想使用批处理来进行上传,还好只固定上传一个php文件,多了还真不好搞. 1.下载winscp 大家可以去网上自己找,我把winscp安装在c:下的 2.把要执行的命令保存到文件winscp.bat里,这个winscp.bat可以自己创建,我是放在d:下的. winscp.bat脚本内容: 复制代码 代码如下: option co

  • linux拷贝命令之高级拷贝scp命令详解

    Linux命令scp scp - secure copy (remote file copy program):她是一个安全的远程文件拷贝程序. SYNOPSIS :语法如下scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2 看

  • shell结合expect写的批量scp脚本工具

    在部署一个任务时,其中有一项必须的过程就是将一些文件,如安装包发送到大量的服务器上去.虽然已有宇哥的脚本可用:通过paramiko模块提供的ssh和scp功能编写的python脚本.但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具. expect用于自动化地执行linux环境下的命令行交互任务,例如scp.ssh之类需要用户手动输入密码然后确认的任务.有了这个工具,定义在scp过程中可能遇到的

  • linux使用scp命令备份文件 scp拷贝文件

    因为一些原因,需要换一台VPS,所以就需要为服务器转移文件了.但是当我在为原来服务器上的东西打包的时候,问题来了,打包还没有一半,就提示服务器空间不足了!这个上次已经因为空间不足服务器都宕机了,那怎么办?不够空间的话没办法打包啊!然后突然想到SFTP,因为我服务器上没有装FTP,一直都是使用SFTP来当FTP使得,于是上网搜索了一下,还真找到了一个scp命令.使用起来也很简单,旧的服务器IP是204.152.221.90,要把上面的/home/wwwroot的文件拷贝过来,那么在新的服务器上面执

  • 魔兽世界item.scp文件参数说明

    item项大揭秘!主办:烧卖     协力:小德3世(精灵籍)   物品回收:齐钠(精灵籍)***************************************name=??              名称stackable=N          可以携带的,1格中同时可放置几个model=XXXX           对应的模型编号buyprice=XXX         买进的价格sellprice=XXX        卖出的价格level=X              物品的等

  • ssh,scp自动登陆的实现方法

    示例:A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A上运行命令:# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)# ssh root@192.168.60.110  "mkdir .ssh; chmod 0700 .ssh" (需要输入密码)# scp ~/.ssh/id_rsa.pub  root@192.168.60.11

  • scp命令详解(全)

    svn 删除所有的 .svn文件 复制代码 代码如下: find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录. 把计 -a 尽可能将档案状态.权限等资料都照原状予以复制. -r 若 source

  • expect实现单台、多台服务器批量scp传输文件

    今天公司同事要在一台服务器上对另外两台同机房的服务器进行文件传输,两台服务器的文件存放地址一致,密码和key也一致(我们公司在安全上做得有点变态的),为了效率写了下面这个脚本. 1.单台传输脚本 cat /root/soft_shell/allscp.sh 复制代码 代码如下: #!/usr/bin/expect if {$argc < 2} {         send_user "usage: $argv0 src_file username ip dest_file password

  • linux使用scp实现服务器A向服务器B传输文件

    scp是有Security的文件copy,基于ssh登录.操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令. 复制代码 代码如下: scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root 然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了. 如果想反过来操作,把文件从远程主机copy到当前系统,也很简单. 复制代码 代码如下: scp root@172.19.2.

  • Linux两台服务器之间传输文件和文件夹操作步骤

    今天处理一个项目要迁移的问题,突然发现这么多图片怎么移过去,可能第一时间想到的是先从这台服务器下载下来,然后再上传到另外一台服务器上面去,这个方法确实是可行,但是实在是太费时间了,今天我就教大家怎么快速的在两台服务器之间传输文件和文件夹. 第一步:打开我们的远程连接工具,输入账号密码登录到服务器,如图: 点击文件打开或者新建一个会话,新建会话输入主机的ip和账号密码即可,如果已经登录过,直接点击文件下面那个带+号的图标就可以了. 第二步:找到你要传输的文件或者文件夹: 这里有这么多图片,我随便传

  • 记录服务器rm -rf误删文件的恢复过程

    安排一个工程师在一台生产服务器上安装Oracle,工程师边研究边安装,感觉装的不对,准备卸载重新安装.从网上找到卸载方法,其中要执行一行命令删除Oracle的安装目录,命令如下: rm -rf $ORACLE_BASE/* 如果ORACLE_BASE这个变量没有赋值,那命令就变成了 rm -rf /* ==||,妹子使用的可是root账户啊.就这样,把整个盘的文件全部删除了,包括应用Tomcat.MySQL数据库 and so on.... (mysql数据库不是在运行吗?linux能删除正在执

  • ASP.NET插件uploadify批量上传文件完整使用教程

    uploadify批量上传文件完整使用教程,供大家参考,具体内容如下 1.首先准备uploadify的js文件,网上一搜一大堆 2.上传页面UpFilePage.aspx 关键代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/h

  • asp.net批量多选文件上传解决方案

    多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能. 主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前

  • TP3.2批量上传文件或图片 同名冲突问题的解决方法

    本文实例为大家分享了TP3.2批量上传文件或图片的具体代码,并解决了同名冲突问题,供大家参考,具体内容如下 1.html <form action="{:U('Upload/index')}" enctype="multipart/form-data" method="post" > <p><input type="file" id="file3" name="ID[

  • 使用Linux shell脚本实现FTP定时执行批量下载指定文件

    使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用mget结合正则表达式下载文件 #获取昨天日期,为后面下载使用 T=`date -d yesterday +%Y%m%d` 4.连接FTP服务器,到指定路径下下载文件 ftp -n <<EOF open $ip user $u $p binary cd /hour #远程服务器文件目录 lcd /h

  • JS实现批量上传文件并显示进度功能

    今天接受项目中要完成文件批量上传文件而且还要显示上传进度,一开始觉得这个应该不是很麻烦,当我在做的时候遇到了很多问题,很头疼啊. 不过看了别人写的代码,自己也测试过,发现网上好多都存在一些问题,并不是自己想要的.然后自己查阅各种资料,经过自己总结,最终完成了这个功能. 如果大家有什么问题可以提出来,一起交流,学习.有什么不对的地方也指出来,我也虚心学习.自己也是刚写博客,您们的赞是我写博客的动力,谢谢大家. 条件:我采用struts2,java ,ajax,FormData实现; 1.实现的逻辑

随机推荐