码迷,mamicode.com
首页 > 其他好文 > 详细

expect批量scp脚本

时间:2016-06-28 13:19:42      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:expect   scp   批量复制   脚本   

实验环境

1. 本地主机

192.168.1.17


2. 远程主机

192.168.1.18

192.168.1.19


实验目标

使用expect非交互式脚本与scp命令结合,实现scp批量传输本地文件到远程主机。


脚本注意事项

1. 确保本地主机已安装expect

2. 目标主机非第一次登陆,scp时,不需要输入“yes”

3. 注意列表文件与变量的顺序

############################################################################################

具体操作

1. 创建所需传输文件以及列表文件iplist.txt

[root@node17 sh]# echo "hi" > /tmp/hi.txt 

[root@node17 sh]# echo "hello" > /home/hello.txt

[root@node17 sh]# cat iplist.txt 

远程ip远程密码本地文件目标路径      #注意:这一行不能出现

192.168.1.18123456/tmp/hi.txt/tmp

192.168.1.19654321/home/hello.txt/home


2. 创建执行脚本auto_ssh.sh

[root@node17 sh]# cat auto_ssh.sh 

#!/bin/bash
for i in `awk ‘{print $1}‘ iplist.txt`
do
x=`awk /${i}/‘{print $2}‘ iplist.txt`
y=`awk /${i}/‘{print $3}‘ iplist.txt`
z=`awk /${i}/‘{print $4}‘ iplist.txt`
./expect.sh ${i} ${x} ${y} ${z}
done


3. 创建expect脚本expect.sh

[root@node17 sh]# cat expect.sh 

#!/usr/bin/expect -f

set timeout -1

set DIP [lindex $argv 0]

set PASS [lindex $argv 1]

set SRC_FILE [lindex $argv 2]

set DEST_FILE [lindex $argv 3]


spawn scp $SRC_FILE $DIP:$DEST_FILE

expect "password:" {

send "$PASS\n"

}

expect "100%"

expect eof

--------------------------------------------------

#需要输入“yes”时的代码

spawn scp $SRC_FILE $DIP:$DEST_FILE

expect {

    "(yes/no)?"

     {

     send "yes\n"

     expect "password:" {

send "$PASS\n"

}

      }

}

expect "100%"

expect eof

----------------------------------------------------


4. 授权

[root@node17 sh]# chmod 755 auto_ssh.sh expect.sh


5. 执行脚本auto_ssh.sh

[root@node17 sh]# ./auto_ssh.sh 

spawn scp /tmp/hi.txt 192.168.1.18:/tmp

root@192.168.1.18‘s password: 

hi.txt                                                                              100%    3     0.0KB/s   00:00    

spawn scp /home/hello.txt 192.168.1.19:/home

root@192.168.1.19‘s password: 

hello.txt                                                                           100%    6     0.0KB/s   00:00    

[root@node17 sh]# 


6. 远程主机验证

192.168.1.18

[root@node18 ~]# cat /tmp/hi.txt

hi


192.168.1.19

[root@node19 ~]# cat /home/hello.txt 

hello


############################################################################################

总结

虽然以上的方式能够实现scp批量复制的目的,但是较为繁琐,而且没有结合if判断和for循环语句,效率并不高。


expect批量scp脚本

标签:expect   scp   批量复制   脚本   

原文地址:http://top88.blog.51cto.com/11341662/1793473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!