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 [email protected]$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 [email protected]$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匹配

原文地址:https://www.cnblogs.com/wuning/p/11909084.html

时间: 2024-10-09 18:43:59

expect实现脚本的 自动交互的相关文章

Linux - 通过expect工具实现脚本的自动交互

目录 1 安装expect工具 2 expect的常用命令 3 作用原理简介 3.1 示例脚本 3.2 脚本功能解读 4 其他脚本使用示例 4.1 直接通过expect执行多条命令 4.2 通过shell调用expect执行多条命令 5 spawn not found 的解决 1 安装expect工具 expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是: spawn启动指定进程 -> expect获取指定关键字

expect工具实现脚本的自动交互

1 安装expect工具 expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是: spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成, 退出. 由于expect是基于tcl的, 所以需要确保系统中安装了tcl: 检查是否安装了tcl: whereis tcl tcl: /usr/lib64/tcl8.5 /usr/include/tcl.h /u

自动交互脚本之expect

一.Expect简介 在远程服务器执行某项任务,这是最正常不过了,如何有效自动的执行呢?这里介绍自动交互脚本expect的使用. Expect是一个简单的工具语言,功能就是进行自动化的人机交互.它的作者对Expect的定义:是一个实现自动交互功能的软件套件(a software suite for automating interactive tools),使用expect,它能帮助我们在合适的情景下进行合适的交互. Expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话&quo

expect 实现自动交互脚本

1. 说明 在编写脚本时,可能会遇到需要在另一台主机上执行一个命令,或者在本机拷贝另一台主机内的一个文件.如果两台主机之间没有做互信,就会牵扯到用户输入密码的交互过程,这对编写自动脚本来说, 就行不通了. 要实现在脚本内的自动交互,就需要 expect 2.  expect 命令介绍 expect 是一个用来处理交互的命令.借助 expect 可以将交互过程写在一个脚本里,就可以实现自动化完成.上面的问题也能得到解决. 形象来说,如下命令的交互都能得到解决: ssh scp ftp CentOS

脚本_使用expect自动交互远程主机安装软件

#!bin/bash#功能:使用expect工具自动交互密码,远程到其它主机,安装httpd软件#作者:liusingbon#删除~/.ssh/known-hosts后,ssh远程任何主机,系统都会询问是否确认要连接到该主机rm -rf ~/ssh/known_hosts expect <<EOF  #下一行开始,所有字符都按照指定格式存入expect,知道遇见EOF为止.spawn ssh 192.168.4.254   #例如远程到该主机expect "yes/no"

shell脚本通过expect脚本实现自动输入密码(使用expect)

背景:在远程文件下载时,需要输入对方的服务器密码,shell不支持交互输入内容,可以用下面两种方式实现 一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断要进行的交互输入内容(send) 1.安装expect 需要先安装tcl:apt-get install tcl apt-get install expect 2.expect使用 2.1一个简单

【转】使用expect实现shell自动交互

原文地址:http://www.nginx.cn/1934.html shell脚本需要交互的地方可以使用here文档是实现,但是有些命令却需要用户手动去就交互如passwd.scp 对自动部署免去用户交互很痛苦,expect能很好的解决这类问题. expect的核心是spawn expect send set spawn 调用要执行的命令expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:send 发送需要交互的值,替代了用户手动输入内容set 设置变量值interact 执行完成

[转]expect实现ssh自动交互

shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh [email protected] expect "*password:" send "123\r" expect "*#" interact 原文链接:http://www.xuanhao360.com/linux-expects/ Expect是一个用来处理交互的命令.借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成.形

shell脚本实现无密码交互的SSH自动登陆

ssh连接远程主机时候询问密码,跟su.sudo命令的默认行为一样,是不从stdin读入数据的,据称是为安全考虑,但是有时候在脚本当中确实需要无人守值的登陆.搜索一下不难找到类似的例子,使用expect来完成密码应答: #!/bin/bash auto_login_ssh () { expect -c "set timeout -1; spawn -noecho ssh -o StrictHostKeyChecking=no $2 ${@:3}; expect *assword:*; send