加载中…
个人资料
_src
_src
  • 博客等级:
  • 博客积分:0
  • 博客访问:577,539
  • 关注人气:30
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ubuntu脚本自动输入sudo密码

(2013-04-28 21:38:07)
标签:

ubuntu

shell

sudo

密码

自动输入

it

分类: Ubuntu/Debian
以sudo apt-get update为例

1、使用echo和管道命令

  • #! /bin/bash
  • echo “password” | sudo apt-get update

这种方法网上说是可行,不过会将密码显示在屏幕上,但我在ubuntu12.04上测试不成功。

2、使用文本块输入重定向

  • #! /bin/bash
  • sudo apt-get update<<EOF
  • password
  • EOF
这种在ubuntu12.04 测试可行也比较简单

3、使用expect命令
  • #! /usr/bin/expect
  • set timeout 30
  • spawn sudo apt-get update
  • expect "password for xxx:"
  • send "password\r"
  • interact

1. [#! /usr/bin/expect] 
  这个跟bash shell 开头一样,是告诉系统使用那个解释器来解释脚本
  注意:这一行需要在脚本的第一行。 
2. [set timeout 30] 
  设置超时时间为30秒
3. [spawn sudo apt-get update] 
  spawn是expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。
  它主要的功能是给后面的"sudo apt-get update"运行进程加个壳,用来传递交互指令。 
4. [expect "password for xxx:"] 
  这里的expect也是expect的一个内部命令。
     个命令的意思是判断上次输出结果里是否包含“password for xxx:”的字符串,如果有则执行下一步,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒 
     在ubuntu下输入sudo命令,shell会提示
      “[sudo]password for xxx”
     这里的xxx就是你的登录名
5. [send "password\r" ] 
  这里就是执行交互动作,与手工输入密码的动作等效。 
  温馨提示: 命令字符串结尾加上“\r”,如果出现异常等待的状态可以核查一下。 
6. [interact] 
  执行完成后保持交互状态,把控制权从expect交会给shell,shell就可以执行sudo apt-get update。
    没有这句的话,即使密码已经成功输入,也不会执行sudo命令,因为控制权还是expect手里,而expect是不能解释apt-get update 命令的。

注意:ubuntu12.04默认是没装expect的,可以通过下面命令安装。
sudo apt-get install expect

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有