expect实现脚本的 自动交互

1.需求

最近需要使用scp自动将本地服务器的文件拷贝到远程服务器上;

2.安装expect

#安装expect前,需要安装tcl环境
yum -y install tcl
yum -y install expect

3.expect脚本

#!/usr/bin/expect

set passwd "xxxx"
set ip "192.168.x.xxx"
set username "scpuser"

#不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待5秒
set timeout 5

spawn scp -P 62471 /opt/module/jobs/xx.txt $username@$ip:/home/scpuser

#当检测到 password 时,会自动发送 $passwd 并回车
expect {
   "password"
        {
          send "$passwd\n"
        }
   "yes/no"
        {
          sleep 5
          send "yes\n"
        }
}

# 退出spawn开启的进程
send "exit\r"

# 退出此expect交互程序
expect eof

问题:不能通过 sh 脚本的方式运行expect脚本

4.shell脚本使用expect工具

#!/bin/bash

passwd="xxxx"
username="scpuser"
ip="192.168.x.xxx"

# 指定执行引擎
/usr/bin/expect <<EOF

    #不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待5秒
    set timeout 5

    spawn scp -P 62471 /opt/module/jobs/xxx.txt $username@$ip:/home/scpuser
        
        #当检测到 password 时,会自动发送 $passwd 并回车
    expect {
       "password"
            {
              send "$passwd\n"
            }
       "yes/no"
            {
              sleep 5
              send "yes\n"
            }
    }

    # 退出spawn开启的进程
    send "exit\r"

    # 退出此expect交互程序
    expect eof
EOF

5.注意expect eof 和 interact 的区别

interact: 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。
expect eof: 结束expect匹配

猜你喜欢

转载自www.cnblogs.com/wuning/p/11909084.html