Archulate's Blog

System maintence work blog

Expect实现交互

使用expect脚本可以完成一定程度上的自动交互,不过又要学习了。
关于expect的简单介绍。可以看这里 http://zh.wikipedia.org/zh/Expect
下面我记录一下基本用法


expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个….参数
看下面的expect脚本的例子

    <div id="crayon-53145a9320430229454941" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both; font-size: 12px !important; line-height: 15px !important;">



        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title"></span>

        <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="切换显示行编号"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="纯文本显示代码"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="切换自动换行"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="在新窗口中显示代码"><div class="crayon-button-icon"></div></div><span class="crayon-language">Shell</span></div></div>

        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>

        <div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">

!/usr/bin/expect

set username [lindex $argv 0]

set password [lindex $argv 1]

set server [lindex $argv 2]

send_user “UserName is $username\n”

send_user “PassWord is $password\n”

send_user “Server is $server\n”

send_user “Total arg num is $argc\n”

send_user “last but one arg is[lindex $argv [expr $argc-1]]\n”

if { $argc != 3 && $argc != 2 } {

send_user "Usage:username password \[server\] \n"

send_user "\tthe default server is 211.65.64.1 \n"

exit

}

        <div class="crayon-main" style="">

            <table class="crayon-table">

                <tr class="crayon-row">

            <td class="crayon-nums " data-settings="show">

                <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-53145a9320430229454941-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-2">2</div><div class="crayon-num" data-line="crayon-53145a9320430229454941-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-4">4</div><div class="crayon-num" data-line="crayon-53145a9320430229454941-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-6">6</div><div class="crayon-num" data-line="crayon-53145a9320430229454941-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-8">8</div><div class="crayon-num" data-line="crayon-53145a9320430229454941-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-10">10</div><div class="crayon-num" data-line="crayon-53145a9320430229454941-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-12">12</div><div class="crayon-num" data-line="crayon-53145a9320430229454941-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320430229454941-14">14</div></div>

            </td>

                    <td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-line" id="crayon-53145a9320430229454941-1"><span class="crayon-p">#!/usr/bin/expect</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-2"><span class="crayon-e">set </span><span class="crayon-v">username</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-53145a9320430229454941-3"><span class="crayon-e">set </span><span class="crayon-v">password</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">]</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-4"><span class="crayon-e">set </span><span class="crayon-v">server</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-53145a9320430229454941-5"><span class="crayon-i">send_user</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-s">"UserName is $username\n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-6"><span class="crayon-i">send_user</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-s">"PassWord is $password\n"</span></div><div class="crayon-line" id="crayon-53145a9320430229454941-7"><span class="crayon-i">send_user</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-s">"Server is $server\n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-8"><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"Total arg num is $argc\n"</span></div><div class="crayon-line" id="crayon-53145a9320430229454941-9"><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"last but one arg is[lindex $argv [expr $argc-1]]\n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-10"><span class="crayon-st">if</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">$argc</span><span class="crayon-h"> </span><span class="crayon-o">!=</span><span class="crayon-h"> </span><span class="crayon-cn">3</span><span class="crayon-h"> </span><span class="crayon-o">&amp;&amp;</span><span class="crayon-h"> </span><span class="crayon-v">$argc</span><span class="crayon-h"> </span><span class="crayon-o">!=</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320430229454941-11"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"Usage:username password \[server\] \n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-12"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"\tthe default server is 211.65.64.1 \n"</span></div><div class="crayon-line" id="crayon-53145a9320430229454941-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-r">exit</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320430229454941-14"><span class="crayon-sy">}</span></div></div></td>

                </tr>

            </table>

        </div>

    </div>

执行这个文件./launch.exp 1 2 3
屏幕上就会分别打印出参数
send_user用来发送内容给用户。

参数运用方面还有很多技巧
比如$argc 存储了参数个数,args被结构化成一个列表存在argv。$argv0 被初始化为脚本名字。
除此之外,如果你在第一行(#!那行)使用-d (debug参数),可以在运行的时候输出一些很有用的信息
比如你会看见

argv[0] = /usr/bin/expect argv[1] = -d argv[2] = ./launch.exp argv[3] = 1 argv[4] = 2 argv[5] = 3

使用这些也可以完成参数传递

另外在spawn后面加一个interact,会从自动交互状态退出到输入状态,由用户完成剩余的操作.
ecpect也支持使用逻辑结构。基本语法和大多数shell语言;类似,不过使用{}而不是()
另外花括号前后的空格不容小觑,不写就会报错.

– 是用来为划定选项尾的。
当需要像使用选项一样传一个参数,但希望这个参数不要被当作选项解释时,就需要用到这个选项。当阻止其他选项时,可以把它放在”#!”行中
#!/usr/local/bin/expect –
会让所有参数(包括脚本文件名)都存储在argv中。


openVPN 59min重连脚本
学校的OpenVPN服务器非常恶心,每当用户登录时间经过60 min 09 s后就把用户踢下线。为了解决这个问日,我使用这个expect脚本来完成这个目的

    <div id="crayon-53145a9320440188879649" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both; font-size: 12px !important; line-height: 15px !important;">



        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title"></span>

        <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="切换显示行编号"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="纯文本显示代码"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="切换自动换行"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="在新窗口中显示代码"><div class="crayon-button-icon"></div></div><span class="crayon-language">Shell</span></div></div>

        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>

        <div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">

!/usr/bin/expect

openVPN 59min 自动重连脚本

By http://ihipop.info

2010-12-26 11:21

set timeout 30

set username [lindex $argv 0]

set password [lindex $argv 1]

set server [lindex $argv 2]

send_user “UserName is $username\n”

send_user “Filename is $argv0 ,and args No.1-2 is :[lrange $argv 1 2] \n”

send_user “Total arg num is $argc\n”

if { $argc != 3 && $argc != 2 } {

send_user "Usage:username password \[server\] \n"

send_user "\tthe default server is 211.65.64.1 \n"

exit

}

spawn openvpn —config rnas-school.ovpn

expect “Enter Auth Username:”

send “$username\r”

expect “Enter Auth Password:”

send “$password\r”

expect “Initialization Sequence Completed”

interact

等待59min后结束spawn

exec sleep 3540

set timeout 3540

exit

        <div class="crayon-main" style="">

            <table class="crayon-table">

                <tr class="crayon-row">

            <td class="crayon-nums " data-settings="show">

                <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-53145a9320440188879649-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-2">2</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-4">4</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-6">6</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-8">8</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-10">10</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-12">12</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-14">14</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-16">16</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-17">17</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-18">18</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-19">19</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-20">20</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-21">21</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-22">22</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-23">23</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-24">24</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-25">25</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-26">26</div><div class="crayon-num" data-line="crayon-53145a9320440188879649-27">27</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320440188879649-28">28</div></div>

            </td>

                    <td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-line" id="crayon-53145a9320440188879649-1"><span class="crayon-p">#!/usr/bin/expect</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-2"><span class="crayon-p">#openVPN 59min 自动重连脚本</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-3"><span class="crayon-p">#By http://ihipop.info</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-4"><span class="crayon-p">#2010-12-26 11:21</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-5">&nbsp;</div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-6"><span class="crayon-e">set </span><span class="crayon-i">timeout</span><span class="crayon-h"> </span><span class="crayon-cn">30</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-7"><span class="crayon-e">set </span><span class="crayon-v">username</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">]</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-8"><span class="crayon-e">set </span><span class="crayon-v">password</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-9"><span class="crayon-p">#set server [lindex $argv 2]</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-10"><span class="crayon-p">#send_user&nbsp;&nbsp;"UserName is $username\n"</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-11"><span class="crayon-p">#send_user "Filename is $argv0 ,and args No.1-2 is :[lrange $argv 1 2] \n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-12"><span class="crayon-p">#send_user "Total arg num is $argc\n"</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-13"><span class="crayon-st">if</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">$argc</span><span class="crayon-h"> </span><span class="crayon-o">!=</span><span class="crayon-h"> </span><span class="crayon-cn">3</span><span class="crayon-h"> </span><span class="crayon-o">&amp;&amp;</span><span class="crayon-h"> </span><span class="crayon-v">$argc</span><span class="crayon-h"> </span><span class="crayon-o">!=</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-14"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"Usage:username password \[server\] \n"</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-15"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"\tthe default server is 211.65.64.1 \n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-16"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-r">exit</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-17"><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-18"><span class="crayon-e">spawn </span><span class="crayon-i">openvpn</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-e">config&nbsp;&nbsp;</span><span class="crayon-i">rnas</span><span class="crayon-o">-</span><span class="crayon-v">school</span><span class="crayon-e">.ovpn</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-19"><span class="crayon-i">expect</span><span class="crayon-h"> </span><span class="crayon-s">"Enter Auth Username:"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-20"><span class="crayon-i">send</span><span class="crayon-h"> </span><span class="crayon-s">"$username\r"</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-21"><span class="crayon-i">expect</span><span class="crayon-h"> </span><span class="crayon-s">"Enter Auth Password:"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-22"><span class="crayon-i">send</span><span class="crayon-h"> </span><span class="crayon-s">"$password\r"</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-23"><span class="crayon-i">expect</span><span class="crayon-h"> </span><span class="crayon-s">"Initialization Sequence Completed"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-24"><span class="crayon-p">#interact</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-25"><span class="crayon-p">#等待59min后结束spawn</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-26"><span class="crayon-p">#exec sleep 3540</span></div><div class="crayon-line" id="crayon-53145a9320440188879649-27"><span class="crayon-e">set </span><span class="crayon-i">timeout</span><span class="crayon-h"> </span><span class="crayon-cn">3540</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320440188879649-28"><span class="crayon-r">exit</span></div></div></td>

                </tr>

            </table>

        </div>

    </div>

然后上层用一个bash的永真循环来调用这个脚本,传递参数即可。


并行结构

上面的脚本是串行结构,其结果就是,当事态不按照他的发展来的时候,比如出现了异常输出输入请求,但是expect没有匹配到,expect就会一直等待到timeout(默认是10s)
所以为了增加程序健壮性,应该考虑使用并行结构

    <div id="crayon-53145a9320449729472440" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both; font-size: 12px !important; line-height: 15px !important;">



        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title"></span>

        <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="切换显示行编号"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="纯文本显示代码"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="切换自动换行"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="在新窗口中显示代码"><div class="crayon-button-icon"></div></div><span class="crayon-language">Shell</span></div></div>

        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>

        <div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">

!/usr/bin/expect

openVPN 59min 自动重连脚本

By http://ihipop.info

2010-12-26 11:21

set timeout 30

set username [lindex $argv 0]

set password [lindex $argv 1]

set server [lindex $argv 2]

send_user “UserName is $username\n”

send_user “Filename is $argv0 ,and args No.1-2 is :[lrange $argv 1 2] \n”

send_user “Total arg num is $argc\n”

if { $argc != 3 && $argc != 2 } {

send_user "Usage:username password \[server\] \n"

send_user "\tthe default server is 211.65.64.1 \n"

exit

}

spawn openvpn —config rnas-school.ovpn

expect {

“Enter Auth Username:” {

send “$username\r”

exp_continue

}

“Enter Auth Password:” {

send “$password\r”

exp_continue

}

“Initialization Sequence Completed” {

#interact

set timeout 3540

#set timeout 3

exp_continue

}

“AUTH: Received AUTH_FAILED control message” {

#interact

send_user “AUTH_FAILED\n”

exit

}

eof {

send_user “eof\n”

exit

}

timeout {

send \003

send_user “timeout \n”

exit

}

}

        <div class="crayon-main" style="">

            <table class="crayon-table">

                <tr class="crayon-row">

            <td class="crayon-nums " data-settings="show">

                <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-53145a9320449729472440-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-2">2</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-4">4</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-6">6</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-8">8</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-10">10</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-12">12</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-14">14</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-16">16</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-17">17</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-18">18</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-19">19</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-20">20</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-21">21</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-22">22</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-23">23</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-24">24</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-25">25</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-26">26</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-27">27</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-28">28</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-29">29</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-30">30</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-31">31</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-32">32</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-33">33</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-34">34</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-35">35</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-36">36</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-37">37</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-38">38</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-39">39</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-40">40</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-41">41</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-42">42</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-43">43</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-44">44</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-45">45</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-46">46</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-47">47</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-48">48</div><div class="crayon-num" data-line="crayon-53145a9320449729472440-49">49</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320449729472440-50">50</div></div>

            </td>

                    <td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-line" id="crayon-53145a9320449729472440-1"><span class="crayon-p">#!/usr/bin/expect</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-2"><span class="crayon-p">#openVPN 59min 自动重连脚本</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-3"><span class="crayon-p">#By http://ihipop.info</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-4"><span class="crayon-p">#2010-12-26 11:21</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-5">&nbsp;</div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-6"><span class="crayon-e">set </span><span class="crayon-i">timeout</span><span class="crayon-h"> </span><span class="crayon-cn">30</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-7"><span class="crayon-e">set </span><span class="crayon-v">username</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">]</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-8"><span class="crayon-e">set </span><span class="crayon-v">password</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-i">lindex</span><span class="crayon-h"> </span><span class="crayon-v">$argv</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-9"><span class="crayon-p">#set server [lindex $argv 2]</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-10"><span class="crayon-p">#send_user&nbsp;&nbsp;"UserName is $username\n"</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-11"><span class="crayon-p">#send_user "Filename is $argv0 ,and args No.1-2 is :[lrange $argv 1 2] \n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-12"><span class="crayon-p">#send_user "Total arg num is $argc\n"</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-13"><span class="crayon-st">if</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">$argc</span><span class="crayon-h"> </span><span class="crayon-o">!=</span><span class="crayon-h"> </span><span class="crayon-cn">3</span><span class="crayon-h"> </span><span class="crayon-o">&amp;&amp;</span><span class="crayon-h"> </span><span class="crayon-v">$argc</span><span class="crayon-h"> </span><span class="crayon-o">!=</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-14"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"Usage:username password \[server\] \n"</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-15"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"\tthe default server is 211.65.64.1 \n"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-16"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-r">exit</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-17"><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-18"><span class="crayon-e">spawn </span><span class="crayon-i">openvpn</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-e">config&nbsp;&nbsp;</span><span class="crayon-i">rnas</span><span class="crayon-o">-</span><span class="crayon-v">school</span><span class="crayon-e">.ovpn</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-19"><span class="crayon-e">expect</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-20"><span class="crayon-h"> </span><span class="crayon-s">"Enter Auth Username:"</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-21"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-i">send</span><span class="crayon-h"> </span><span class="crayon-s">"$username\r"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-22"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-i">exp_continue</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-23"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-24"><span class="crayon-h"> </span><span class="crayon-s">"Enter Auth Password:"</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-25"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">send</span><span class="crayon-h"> </span><span class="crayon-s">"$password\r"</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-26"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">exp_continue</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-27"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-28"><span class="crayon-h"> </span><span class="crayon-s">"Initialization Sequence Completed"</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-29"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-p">#interact</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-30"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-e">set </span><span class="crayon-i">timeout</span><span class="crayon-h"> </span><span class="crayon-cn">3540</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-53145a9320449729472440-31"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-p">#set timeout 3&nbsp;&nbsp; </span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-32"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">exp_continue</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-33"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-34"><span class="crayon-h"> </span><span class="crayon-s">"AUTH: Received AUTH_FAILED control message"</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-35"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-p">#interact</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-36"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"AUTH_FAILED\n"</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-37"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-r">exit</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-38"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-39"><span class="crayon-h"> </span><span class="crayon-e">eof</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-40"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"eof\n"</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-41"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-r">exit</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-42"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-43">&nbsp;</div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-44"><span class="crayon-h"> </span><span class="crayon-e">timeout</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-45"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">send</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-cn">003</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-46"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-i">send_user</span><span class="crayon-h"> </span><span class="crayon-s">"timeout \n"</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-47"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-r">exit</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-48"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-53145a9320449729472440-49">&nbsp;</div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320449729472440-50"><span class="crayon-sy">}</span></div></div></td>

                </tr>

            </table>

        </div>

    </div>

上面看到的是把expect脚本单独运行的例子
其实也可以和bash脚本结合的很好
看下面的例子

    <div id="crayon-53145a9320456801978064" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both; font-size: 12px !important; line-height: 15px !important;">



        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title"></span>

        <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="切换显示行编号"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="纯文本显示代码"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="切换自动换行"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="在新窗口中显示代码"><div class="crayon-button-icon"></div></div><span class="crayon-language">Shell</span></div></div>

        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>

        <div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">

!/bin/bash

auto_smart_ssh () {

expect -c "set timeout -1;

            spawn ssh -o StrictHostKeyChecking=no $2 ${@:3};

            expect {

                *assword:* {

                    send $1\r;

                    expect {

                        *denied* {

                            exit 2;

                        }

                        eof

                    }

                }

                eof {

                    exit 1;

                }

            }

            "

return $?

}

auto_smart_ssh passwd user@host ls /var

echo -e “\n—-Exit Status: $?”

        <div class="crayon-main" style="">

            <table class="crayon-table">

                <tr class="crayon-row">

            <td class="crayon-nums " data-settings="show">

                <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-53145a9320456801978064-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-2">2</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-4">4</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-6">6</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-8">8</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-10">10</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-12">12</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-14">14</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-16">16</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-17">17</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-18">18</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-19">19</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-20">20</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-21">21</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-22">22</div><div class="crayon-num" data-line="crayon-53145a9320456801978064-23">23</div><div class="crayon-num crayon-striped-num" data-line="crayon-53145a9320456801978064-24">24</div></div>

            </td>

                    <td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-line" id="crayon-53145a9320456801978064-1"><span class="crayon-p">#!/bin/bash</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-2"><span class="crayon-e">auto_smart_ssh</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-3"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">expect</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-i">c</span><span class="crayon-h"> </span>"<span class="crayon-e">set </span><span class="crayon-i">timeout</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-cn">1</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-4"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-e">spawn </span><span class="crayon-i">ssh</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-i">o</span><span class="crayon-h"> </span><span class="crayon-v">StrictHostKeyChecking</span><span class="crayon-o">=</span><span class="crayon-e">no</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-cn">2</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-sy">{</span><span class="crayon-sy">@</span><span class="crayon-o">:</span><span class="crayon-cn">3</span><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-5"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-e">expect</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-6"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">*</span><span class="crayon-i">assword</span><span class="crayon-o">:</span><span class="crayon-o">*</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-7"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">send</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-cn">1</span><span class="crayon-sy">\</span><span class="crayon-i">r</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-8"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-e">expect</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-9"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">*</span><span class="crayon-e">denied</span><span class="crayon-o">*</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-10"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-r">exit</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-11"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-12"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">eof</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-14"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-15"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-e">eof</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-16"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-r">exit</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-17"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-18"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-19"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>"</div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-20"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-sy">?</span></div><div class="crayon-line" id="crayon-53145a9320456801978064-21"><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-22"><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-53145a9320456801978064-23"><span class="crayon-e">auto_smart_ssh </span><span class="crayon-e">passwd </span><span class="crayon-i">user</span><span class="crayon-sy">@</span><span class="crayon-e">host </span><span class="crayon-r">ls</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-t">var</span></div><div class="crayon-line crayon-striped-line" id="crayon-53145a9320456801978064-24"><span class="crayon-r">echo</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-i">e</span><span class="crayon-h"> </span><span class="crayon-s">"\n---Exit Status: $?"</span></div></div></td>

                </tr>

            </table>

        </div>

    </div>

B B B B B