expect使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expect使用相关的知识,希望对你有一定的参考价值。

有些命令却需要用户手动去就交互如passwd、scp


对自动部署免去用户交互很痛苦,expect能很好的解决这类问题。


expect的核心是spawn expect send set


spawn 调用要执行的命令

expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:

send 发送需要交互的值,替代了用户手动输入内容

set 设置变量值

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

expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif


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


设置expect永不超时

set timeout -1


设置expect 300秒超时,如果超过300没有expect内容出现,则退出

set timeout 300

使用实例:

批量发送ssh秘钥

allip=`nmap -v -sP 192.168.238.0/24|grep 192.168|grep -v "down"|grep -v 192.168.238.2 |cut -d " " -f5 2>/dev/null` 通过nmap扫描ip,获取ip

        [ ! -x /usr/bin/expect ] && yum install expect -y  判断是否安装了expect因为默认是没有安装的

下面就是一个循环了 

        for i in $allip;do

                if [[ $i =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]];then

                /usr/bin/expect <<EOF

                set timeout 10

                spawn ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]$i

                expect {

                        "password" {send "redhat\n"}

                }

        expect eof

EOF


这样就可以自动把自己主机上的秘钥发送到对应的主机上面


本文出自 “12336320” 博客,请务必保留此出处http://12346320.blog.51cto.com/12336320/1896781

以上是关于expect使用的主要内容,如果未能解决你的问题,请参考以下文章

expect安装和使用

expect基本使用方法

linux中使用expect实现自动登录

Linux操作系统中expect如何使用?

expect使用方法

如何在bash shell脚本中使用expect