expect批量scp脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

[[email protected] sh]# echo "hi" > /tmp/hi.txt 

[[email protected] sh]# echo "hello" > /home/hello.txt

[[email protected] 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

[[email protected] 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

[[email protected] 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. 授权

[[email protected] sh]# chmod 755 auto_ssh.sh expect.sh


5. 执行脚本auto_ssh.sh

[[email protected] sh]# ./auto_ssh.sh 

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

[email protected]‘s password: 

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

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

[email protected]‘s password: 

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

[[email protected] sh]# 


6. 远程主机验证

192.168.1.18

[[email protected] ~]# cat /tmp/hi.txt

hi


192.168.1.19

[[email protected] ~]# cat /home/hello.txt 

hello


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

总结

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


以上是关于expect批量scp脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用perl实现scp批量分发

linux 复制文件到另一个服务器脚本 scp expect

Linux系统批量配置脚本

原!linux脚本 expect命令 完成 输入密码交互 进行scp远程文件拷贝

Centos ssh和scp利用expect自动填充密码

ssh+expect+scp实现服务器集群自动化搭建