Shll编程之Expect免交互

Shll编程之Expect免交互

1.Expect概述

2.Expect安装(底层语言Tcl)

3.Expect基本命令

4.Expect执行方式

5.Expect案例

Expect概述:

1.Expect是建立在tcl语言基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助。

2.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入yes/no password等信息。为了模拟这种输入,可以使用Expect脚本。

Expect安装

1.挂载光盘

2.制作本地YUM源

执行安装命令:yum -y intall expect

基本命令:

1.send:向进程发送字符串,用于模拟用户的输入

该命令不能自动回车换行,一般要加\r(回车)

2.expect

expect的一个内部命令判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回

只能捕捉由spawn启动的进程的输出

#####3.spawn:启动进程,并跟踪后续交互信息

4.interact:执行完成后保持交互状态,把控制权交给控制台
5.Timeout:指定超时时间,过期则继续执行后续指令

单位是:秒

timeout -1为永不超时

默认情况下,timeout是10秒

6.exp_continue

允许expect继续向下执行指令

7.send_user:

回显命令,相当于echo

8.$argv参数数组:

Expect脚本可以接受从bash传递的参数,可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数

9.Expect脚本必须以interact或expect ecof结束,执行自动化任务通常expect eof就够了

expect eof实在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记

Expect执行方式:

直接执行

[[email protected]~]#more a.sh
#!/usr/bin/expect       //Expect二进制文件的路径
    set timeout 60      //60秒等待时间
    log_file test.log       //日志文件
    log_user 1              //日志用户
    set hostname [lindex $argv 0]       //追加参数0,统计变量,加载第1位置
    set password [lindex $argv 1]       //追加参数1,统计变量,加载第2位置
    spawn ssh [email protected]$hostname
    expect {        //进行匹配
            "(yes/no)"
            {send"yes/r";exp_continue}      //输入yes,继续执行
            "*password"     //参数2
            {send"$password\r"}     //交给控制台人为输入
    }
interact
[[email protected]~]#chmod a+x a.sh
[[email protected]~]#./a.sh

Demo1:远程登录

[[email protected] opt]# yum install expect -y     //安装服务
[[email protected] opt]# vim a.sh

#!/usr/bin/expect
#超时时间
set timeout 20
log_file test.log
log_user 1
#参数传入
set hostname [lindex $argv 0]
set password [lindex $argv 1]
#追踪命令
spawn ssh [email protected]$hostname
#捕捉信息并且匹配,免交互执行
expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send "$password\r"}
}
#控制权交给控制台执行
interact

[[email protected] opt]# chmod +x a.sh
[[email protected] opt]# ./a.sh 192.168.56.129 123123
spawn ssh [email protected]
The authenticity of host ‘192.168.56.129 (192.168.56.129)‘ can‘t be established.
ECDSA key fingerprint is SHA256:DSqXtMX4L3DIIYCai7ACEftdbCIH5n0Y5SPpGCzsjdw.
ECDSA key fingerprint is MD5:14:93:39:65:27:31:a6:28:8b:28:d1:2c:fb:32:7b:4d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.56.129‘ (ECDSA) to the list of known hosts.
[email protected]‘s password:
Last login: Thu Oct 10 09:46:08 2019 from 192.168.56.1
//此时已远程登录对方主机
[[email protected] ~]# 登出      //按Ctrl+d退出远程登录
Connection to 192.168.56.129 closed.

嵌入执行:

[[email protected]~]#more b.sh
#!/bin/bash
    hostname=$1
    password=$2
    /usr/bin/expect<<-EOF
    spawn ssh [email protected]${hostname}
    expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send"$password\r"}
    }
    expect "*]#"
    send "exit\r"
    expect eof
EOF
[[email protected]~]#source b.sh

Demo2:登录远程控制后自动退出

[[email protected] opt]# vim b.sh

#!/bin/bash
hostname=$1
password=$2

/usr/bin/expect<<-EOF

spawn ssh [email protected]${hostname}

expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send "$password\r"}
}
expect "*]#"
send "exit\r"
expect eof
EOF

[[email protected] opt]# chmod +x a.sh
[[email protected] opt]# ./a.sh 192.168.56.129 123123
spawn ssh [email protected]
The authenticity of host ‘192.168.56.129 (192.168.56.129)‘ can‘t be established.
ECDSA key fingerprint is SHA256:DSqXtMX4L3DIIYCai7ACEftdbCIH5n0Y5SPpGCzsjdw.
ECDSA key fingerprint is MD5:14:93:39:65:27:31:a6:28:8b:28:d1:2c:fb:32:7b:4d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.56.129‘ (ECDSA) to the list of known hosts.
[email protected]‘s password:
Last login: Thu Oct 10 09:46:08 2019 from 192.168.56.1
[[email protected] ~]# 登出
Connection to 192.168.56.129 closed.
//自动退出远程控制
EOF容错只能容制表符TAB,但是空格不行

Demo3:创建用户tom,密码tom123

[[email protected] opt]# vim c.sh

#!/bin/bash
user=$1
password=$2
#非交互命令放在expect外面
useradd $user
#开始进行交互
expect << EOF
spawn passwd $user
expect "新的*"
send "${password}\r"
expect "重新*"
send "${password}\r"
expect eof;
EOF

[[email protected] opt]# chmod +x c.sh
[[email protected] opt]# ./c.sh tom tom123
spawn passwd tom
更改用户 tom 的密码 。
新的 密码:
无效的密码: 密码少于 7 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[[email protected] opt]# su zhou       //切换普通用户zhou
[[email protected] opt]$ su tom        //切换新创建的普通用户tom
密码:                             //提示输入密码
[[email protected] opt]$                //此时进入tom用户

SSH远程登录代码健壮版

#!/usr/bin/expect 

#超时时间
set timeout 20
log_file test.log
log_user 1
#参数传入
set hostname [lindex $argv 0]
set password [lindex $argv 1]
#追踪命令
spawn ssh [email protected]$hostname
#捕捉信息并且匹配,免交互执行
expect {
        "Connection refused" exit
        "service not known" exit
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send "$password\r"}
}
#控制权交给控制台执行
interact
exit

原文地址:https://blog.51cto.com/14464303/2441084

时间: 2024-10-28 20:36:22

Shll编程之Expect免交互的相关文章

Shell编程之Expect免交互

Shell编程之Expect免交互 Expect概述 Expect安装 Expect基本命令 Expect执行方式 Expect案例 Expect概述 Expect Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助 在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入yes/no password等信息.为了模拟这种输入,可以使

无标题文章shell编程之Expect免交互

shell编程之Expect免交互 前言 一:Expect概述 Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题,对于大规模的linux运维很有帮助 在Linux运维和开发中,我们经常需要远程登录服务器进行操作,在登录的过程是一个交互的过程,可能会需要输入yes/no password等信息. 为了模拟这种输入,可以使用Expect脚本 二:Expect基本命令 2.1:Expect安装 系统一般不自带,需要自己安装

Shell编程之Expect免交互语句详解

Expect概述 Expect是建立在tcl基础_上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入(yes/no)password等信息.为了模拟这种输入,可以使用Expect脚本. Expect安装 yum install expect -y 基本命令 send: 向进程发送字符串,用于模拟用户的输入.

expect 免交互配置互信

++++++++++++++++++++++++++++++++++++++++ 标题:expect 免交互配置互信 时间:2020年3月3日 ++++++++++++++++++++++++++++++++++++++++ #/usr/bin/env expect set  ip  192.168.100.100 set  user  root set  password  centos set  timeout  5 spawn ssh-copy-id "${user}@${ip} -p 2

Shell脚本之Expect免交互

Expext概述 Expect是建立在tcl基础上的一个工具,Expect是用来自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.有助于大规模的系统运维工作.在日常的运维与开发中,常常需要运城登录到服务器,然而登录的过程却是个需要交互的过程,可能会要输入yes/no等信息,使用Expect脚本即可实现免交互操作. Expect安装 挂载光盘制作本地YUM源执行安装命令yum install expect -y 基本命令 send 向进程发送字符串,用于模拟用户的输入,该命令不能自动

Shell编程——Expect免交互

Expect概述 Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的Linux运维很有帮助在Linux运维和开发中,我们经常需要远程登录服务器进行操作,登录过程是一个交互的过程,可能会需要输入yes/no,password等信息.为了模拟这种输入,可以使用Expect脚本. 基本命令 send:向进程发送字符串,用于模拟用户的输入 该命令不能自动回车换行,一般要加\r(回车) expect expect的

Expect免交互

一.expect 概述:(1)expect 是建立在 tcl 基础上的一个工具,expect是用来进行自动化控制和测试的工具,主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助(2)在linux 运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入yes/no password等信息.为了模拟这种输入,可以使用expect脚本.(3)安装 yum install expect -y 二.基本命令:(1)send:向进程发送字符串,用

shell进阶——expect免交互工具的使用

前言: expect是什么? 答:expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预.说白了,expect就是一套用来实现自动交互功能的软件. expect能做什么? 答:借助expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成.尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人

expect免交互脚本编程

一.大纲 1.Expect概述2.Expect安装(底层语言Tcl)3.Expect基本命令4.Expect执行方式5.Expect案例 一.Expect概述 1.Expect是建立在tcl语言基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助.2.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入yes/no password等信息.为了模拟这种输入,可