论坛风格切换
  • 4207阅读
  • 0回复

sudo shell 脚本执行命令 怎么样自动输入密码 [复制链接]

上一主题 下一主题
离线ensoon
 

发帖
166
金币
0
威望
15
只看楼主 倒序阅读 使用道具 楼主  发表于: 2011-10-12
如果你没有root 权限,但是你有sudo 权限,但是sudo 之后要输入密码,怎么样自动输入密码

有可能你是这么写的

#!/usr/bin/expect
spawn sudo php test.php
expect "密码:"
send "yourpassword\r"
expect eof
exit

当你第一运行的时候的是没有问题的,但是如果你立即运行会报spawn id exp6 not open

这个什么原因呢

第一次将会正确运行,因为第一次sudo时需要密码;但是第二次运行时由于密码已经输过(默认情况下sudo密码再次输入时间为5分钟),则不会提示用户去输入,所以第一个expect将无法匹配到“密码”,而且必须注意的是如果是spawn命令出现交互式提问的但是expect匹配不上的话,那么expect “密码”将不会等待,而直接去执行expect eof。
这时就会报expect: spawn id exp6 not open,因为没有spawn在执行,后面的expect脚本也将会因为这个原因而不再执行;所以对于类似sudo这种命令分支不定的情况,最好是使用并行的方式进行处理;

所以应该改成这样的

#!/usr/bin/expect
spawn sudo php test.php
expect {
"口令*" {
send_user "sudo now\n"
send "your_password\r"
exp_continue
}
eof
{
send_user "eof\n"
}
}
open source ,like douban.com [color=#ff0000][url]www.ensoon.com[/url][/color]
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个