1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令
常用命令:
expect 获取上一命令执行后的返回信息,如果匹配成功 则执行后续操作
spawn 交互程序开始后面跟命令
set 定义变量
puts 输出变量
set timeout 设置超时时间
send 用于发送字符串或者命令
exit 退出expect脚本
eof expect执行结束 退出
interact 结束
2.实例
需求1描述:在没有ssh密钥认证时,scp远程复制到目标主机需要每次输入密码,这里使用expect免去手动输入密码的操作
主流程脚本:
#!/bin/sh
expect /home/sendUtil.sh 参数1 参数2 参数3 参数4
远程复制scp脚本:
#!/usr/bin/expect #获取参数并设置局部变量 set timeout 15 set BASE_PATH [lindex $argv 0] set FILE_NAME [lindex $argv 1] set IP [lindex $argv 2] set TARGET_PATH [lindex $argv 3]
#执行scp操作 spawn scp -P 16022 ${BASE_PATH}/target/$FILE_NAME user@$IP:$TARGET_PATH #匹配到输入密码提示
expect "*assword*" #发送密码
send "Password " #结束交互
interact
需求1描述:在没有ssh密钥认证时,sftp到远程主机,切换到指定目录,并将目录下所有文件下载到本地
主脚本和上面一样
sftp脚本:
#!/usr/bin/expect spawn sftp -oPort=16022 sftp@192.168.12.32 expect "*assword*" send "Password " expect "*sftp*" send "cd /user/download " expect "*sftp*" send "get -r * " interact