凤凰落山 發表於 2020-4-13 20:38:00

ubuntu脚本自动输入sudo密码

<div class="articalTitle">
<h2 id="t_4da051a60101ag73" class="titName SG_txta"><cite><img class="SG_icon SG_icon111 lazyload" alt="" width="15" height="15" align="absmiddle" data-src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif">转载<span class="arrow">▼</span></cite></h2>
<h1 class="title-article">linux 新开一个终端并在新终端中执行命令</h1>
</div>
<div id="sina_keyword_ad_area" class="articalTag">&nbsp;gnome-terminal -t <span class="hljs-string">"title-name" -- bash -c <span class="hljs-string">"sh ./run.sh;exec bash;"</span></span></div>
<div class="articalTag">&nbsp;</div>
<div class="articalTag">&nbsp;</div>
<div class="articalTag">&nbsp;</div>
<div class="articalTag">&nbsp;</div>
<div id="sina_keyword_ad_area2" class="articalContent   ">
<div>以sudo apt-get update为例</div>
<div>&nbsp;</div>
<div><span><strong>1、使用echo和管道命令</strong></span>
<div>&nbsp;</div>
<div>
<ul>
<li>#! /bin/bash</li>
<li>echo “<span style="color: rgba(255, 0, 0, 1)">password</span>” | sudo -S apt-get update</li>
</ul>
</div>
<div>&nbsp;</div>
<div>这种方法网上说是可行,不过会将密码显示在屏幕上,但我在ubuntu12.04上测试不成功。</div>
<div>&nbsp;</div>
<div><span><strong>2、使用文本块输入重定向</strong></span></div>
<div>&nbsp;</div>
<div>
<ul>
<li>#! /bin/bash</li>
<li>sudo -S apt-get update&lt;&lt;EOF</li>
<li><span style="color: rgba(255, 0, 0, 1)">password</span></li>
<li>EOF</li>
</ul>
</div>
<div>注意:-S&nbsp;是必须的</div>
<div>&nbsp;</div>
<div><span><strong>3、使用expect命令</strong></span></div>
<div>
<ul>
<li>#! /usr/bin/expect</li>
<li>set timeout 30</li>
<li>spawn sudo apt-get update</li>
<li>expect "password for&nbsp;<span style="color: rgba(255, 0, 0, 1)">xxx</span>:"</li>
<li>send "<span style="color: rgba(255, 0, 0, 1)">password</span>\r"</li>
<li>interact</li>
</ul>
</div>
<div>&nbsp;</div>
<div>
<div>
<div><span style="color: rgba(77, 109, 243, 1)">1. [#! /usr/bin/expect]&nbsp;</span></div>
<div>  这个跟bash shell 开头一样,是告诉系统使用那个解释器来解释脚本</div>
<div>  注意:这一行需要在脚本的第一行。&nbsp;</div>
<div><span style="color: rgba(77, 109, 243, 1)">2. [set timeout 30]&nbsp;</span></div>
<div>  设置超时时间为30秒</div>
<div><span style="color: rgba(77, 109, 243, 1)">3. [spawn&nbsp;sudo apt-get update]&nbsp;</span></div>
<div>  spawn是expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。</div>
<div>  它主要的功能是给后面的"sudo apt-get update"运行进程加个壳,用来传递交互指令。&nbsp;</div>
<div><span style="color: rgba(77, 109, 243, 1)">4. [expect "password for xxx:"]&nbsp;</span></div>
<div>  这里的expect也是expect的一个内部命令。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;个命令的意思是判断上次输出结果里是否包含“password for xxx:”的字符串,如果有则执行下一步,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在ubuntu下输入sudo命令,shell会提示</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“password for xxx”</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里的xxx就是你的登录名</div>
<div><span style="color: rgba(77, 109, 243, 1)">5. [send "password\r" ]&nbsp;</span></div>
<div>  这里就是执行交互动作,与手工输入密码的动作等效。&nbsp;</div>
<div>  温馨提示: 命令字符串结尾加上“\r”,如果出现异常等待的状态可以核查一下。&nbsp;</div>
<div><span style="color: rgba(77, 109, 243, 1)">6. [interact]&nbsp;</span></div>
<div>  执行完成后保持交互状态,把控制权从expect交会给shell,shell就可以执行sudo apt-get update。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;没有这句的话,即使密码已经成功输入,也不会执行sudo命令,因为控制权还是expect手里,而expect是不能解释apt-get update 命令的。</div>
</div>
<div>&nbsp;</div>
<div><span style="color: rgba(254, 17, 37, 1)">注意:ubuntu12.04默认是没装expect的,可以通过下面命令安装。</span></div>
<div>sudo apt-get install expect</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>原文:</div>
<div>http://blog.sina.com.cn/s/blog_4da051a60101ag73.html</div>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/wal1317-59/p/12693789.html
頁: [1]
查看完整版本: ubuntu脚本自动输入sudo密码