Linux expect实现自动登录脚本实例代码
<p><span><strong>expect</strong></span></p>
<p>
expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。</p>
<p>
<span><strong>引言</strong></span></p>
<p>
目前在公司是一人一台虚拟机,大多数工作都要在虚拟机上完成,为此每天要执行很多次【ssh xxx@xxxxxx】指令登录虚拟机;有很多方式解决这个问题,如使用xshell、secureCRT等工具记录常用的连接,我就写了一个简单的脚本实现一键登录~</p>
<p>
<strong>login.sh脚本内容如下:</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_63614">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash preprocessor bold">#!/usr/bin/expect</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">spawn </code><code class="bash functions">ssh</code> <code class="bash plain">xxx@xxxxxx</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">expect </code><code class="bash string">"*password:"</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">send </code><code class="bash string">"密码\r"</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">interact</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
再将【./login.sh】配置别名alias,或移动到可执行目录中,即可实现【login】一键登录;</p>
<p>
expect是一个处理交互的指令,通过expect我们可以把交互过程写到Shell脚本里以实现一些自动化操作~</p>
<p>
<strong>expect有四个核心的指令:</strong></p>
<ul>
<li>
spawn:启动新进程,后跟新进程要执行的指令;</li>
<li>
expect:指定要监听的字符串,如果spawn进程返回了匹配的字符串(如标准输入的提示信息),则触发send;</li>
<li>
send:发送指定的字符串到spawn进程,代替标准输入;</li>
<li>
interact:用户参与交互;</li>
</ul>
<p>
对于login.sh的执行过程为:</p>
<p>
【spawn】启动一个新进程执行ssh登录指令,【expect】监听到标准输入的提示信息『xxx@xxxxxx's password』符合匹配规则,触发【send】发送密码代替手动输入,完成登录,【interact】用户参与交互,此时已登录上了虚拟机;</p>
<p>
使用expect还可以完成如:批量更新git代码库、自动登录FTP等功能等~</p>
<p>
<span><strong>总结</strong></span></p>
<p>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
原文链接:https://segmentfault.com/a/1190000013894972</p>
頁:
[1]