实验环境
1. 本地主机
192.168.1.17
文件1:/tmp/hi.txt
文件2:/home/hello.txt
2. 远程主机
192.168.1.18 密码:123456 文件:/tmp/hi.txt 目标路径:/tmp
192.168.1.19 密码:654321 文件:/home/hello.txt 目标路径:/home
实验目标
使用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.18 123456 /tmp/hi.txt /tmp
192.168.1.19 654321 /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
6. 远程主机验证
192.168.1.18
[root@node18 ~]# cat /tmp/hi.txt
hi
192.168.1.19
[root@node19 ~]# cat /home/hello.txt
hello
############################################################################################
总结
虽然以上的方式能够实现scp批量复制的目的,并且可以作为模板使用。
转载于:https://blog.51cto.com/dhd1688/1793473