expect套件说明
expect是一个用来实现自动交互功能的软件套件。
如执行shell脚本,需要从终端得到输入时(如ssh root@192.168.1.2),expect可以根据提示,模拟标准输入来实现交互脚本执行。
如:ssh登录,ftp登录等都符合交互的定义。
shell和expect理解为两种不同的脚本语言,expect有独自的语法、变量。
expect安装:包在装机镜像里面有rpm的安装包,安装expect前,需要先安装tcl插件,expect涉及到有tcl的依赖库。
expect的命令
spawn 交互程序开始后面跟命令或者指定程序(启动新进程执行)
expect 获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send 用于发送指定的字符串信息
exp_continue 在expect中多次匹配就需要用到
send_user 用来打印输出 相当于shell中的echo
exit 退出expect脚本
eof expect执行结束 退出
set 定义变量
puts 输出变量
set timeout 设置超时时间
/r 回车
#位置参数会存入数组$argv,与shell不一样
set IP [lindex $argv 0]
set USERNAME [lindex $argv 1]
set PWD [lindex $argv 2]
ssh ${USERNAME}@${IP} #ssh登陆远程主机
spawm命令:就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的
spawn ftp ftp.test.com //打开新的进程,该进程用户连接远程ftp服务器
expect "Name" //进程返回Name时
send "user\r" //向进程输入anonymous\r
expect "Password:" //进程返回Password:时
send "123456\r" //向进程输入don@libes.com\r
expect "ftp> " //进程返回ftp>时
send "binary\r" //向进程输入binary\r
expect "ftp> " //进程返回ftp>时
send "get test.tar.gz\r" //向进程输入get test.tar.gz\r
作用是登录到ftp服务器ftp.test.com 上,并以二进制的方式下载服务器上的文件test.tar.gz
重点来了,怎么实现A机自动远程到B机,B机上自动使用sftp去C机取文件,然后将文件回传到A机
在A主机通过ssh方式登录到B主机后执行相应的命令或者脚本:
ssh 用户名@目的主机地址 ‘要执行的命令或者脚本’
注意:
1.在调用脚本时,必须写全该脚本所在的全路径。
2.要执行的命令用单引号’’扩起来,引号扩起来的命令要和前面的内容写在一行,不能换行。
PS:其他命令
interact 允许用户交互(停在终端界面,允许用户进行操作)
比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。下面的demo在自动登录ftp后,允许用户交互。
spawn ftp ftp.test.com
expect "Name"
send "user\r"
expect "Password:"
send "123456\r"
interact