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.18 123456 /tmp/hi.txt /tmp

192.168.1.19 654321 /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循环语句,效率并不高。

时间: 2024-10-14 19:56:34

expect批量scp脚本的相关文章

linux 批量scp 脚本

scp.sh #!/bin/ship_list=/home/tools/scp/iplistsrc_file=/home/probecheck.shdest_file=/home/username=rootpassword=123456cat $ip_list | while read linedo   host_ip=`echo $line | awk '{print $1}'`   echo "$host_ip"   ./scp.exp $host_ip $username $pa

expect 批量拷贝key文件并且批量执行简单脚本

一.expect简介 expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序.根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及 什么是正确的应答. 它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. shell功能很强大,但是不能实现有交互功能的多机器之前的操作,例如ssh和ftp.而expect可以帮助我们来实现. 二.安装expect软件包 #yum install expect -y 注:使用expect批

使用Shell脚本+expect批量部署ssh

Shell脚本+expect批量部署ssh一.准备工作及思路1,三台机器做实验(centos6.5.IP:192.168.0.22 (主控制).192.168.0.156.192.168.0.157)2,IP:22这一台做主控机器,另外2台做客户机.3,提前在主控制机器上创建好公钥,安装好expect,使用脚本批量推送ssh公钥.4,本次部署是以root身份进行下面的操作.二.正式部署1,首先穿件秘钥[[email protected] .ssh]# ssh-keygen -t rsa Gene

Linux系统批量配置脚本

系统批量配置脚本使用手册 使用要求 linux操作系统(RHEL,kylin,凝思磐石均可用) 本地计算机expect命令可用 ssh.scp命令可用 脚本组成及功能说明 引导脚本 - config.sh 该脚本会引导整个脚本组合的执行,提示用户输入远程计算机IP地址(范围)及root密码. 系统配置脚本 - sysinfo-collect.sh 该脚本中可以自行定制需要在远程计算机上执行的命令,配合引导脚本及响应脚本使用,可以完成的任务有: 在远程计算机批量执行命令: 修改远程计算机配置文件:

2.3-命令批量执行脚本

命令批量执行脚本,同样需要两个脚本来实现:1 exe.expect 2 exe.sh 3 ip.list    IP列表 cat exe.expect #!/usr/bin/expect set host [lindex $argv 0]            #第一个参数,IP列表 set passwd "hd792310" set cm [lindex $argv 1]              #第二个参数,cm要执行的命令 spawn ssh [email protected]

kickstart批量装机脚本

#!/bin/bash #安装必备的软件 yum -y install dhcp tftp-server tftp xinetd syslinux vsftpd yum -y install *kickstart* #配置kickstart服务器端的DHCP服务 >/etc/dhcpd.conf ############################################################# cat> /etc/dhcpd.conf<<EOF ddns-u

linux使用expect批量部署应用

前言:上一篇讲了cobbler,这篇来讲下expect.以前分发文件的时候都是用for循环依次去读ip.当然前提你还得先把ssh通道打通.虽然说expect不用提前做什么准备工作,只需要写两个脚本即可.但是个人认为没有ssh安全.因为使用expect的时候你得先把你的账户写到一个文件里面.且都是明文存储.至于能否加密什么的有待研究.而ssh大家都知道,互换秘钥相对来说安全一点.好了,不多说.来看看它具体应用吧. #1 安装 [[email protected] ~]# yum install e

expect自动化交互脚本(三)

接着写一个稍微复杂点的脚本,分发文件到指定服务器脚本. 首先我们要知道远程分发文件的命令格式 scp 源文件 验证用户@远程主机:远程目录 [[email protected] ~]# scp auto_yes.exp [email protected]:/tmp/ 需求就是通过脚本来实现发送,不需要输入密码,也就是验证用户是固定的还有密码是固定的,其他的主机IP和目的路径是不固定的,我们通过设置为位置变量来实现自定义化.最终实现的效果: [[email protected] ~]# expec

expect批量同步或执行命令工具

expect脚本同步文件 我们知道主机间传输一个文件受网络.文件大小和磁盘读写速率的影响,在传输一个文件时不可能一下子马上传输到对方,但是使用expect脚本的过程中,值得注意的是在脚本结尾以expect eof结束整个脚本,它的作用是当脚本内涉及到有文件传输时,会让文件传输完成后再彻底结束掉脚本进程,这样会让文件能够成功传输到对方主机上.expect若使用exit或者没有eof这个选项,那么在执行脚本时,expect不管你是否有文件正在传输,当脚本内容执行完成后直接结束掉自己的进程,这样就会造