我经常发现自己需要编写脚本,这些脚本必须以普通用户的身份执行某些部分,而以超级用户的身份执行其他部分。我知道关于 SO 的一个类似问题,答案是两次运行相同的脚本并将其作为 sudo 执行,但这对我来说还不够。有时我需要在 sudo 操作后恢复为普通用户。
我在 Ruby 中编写了以下内容来执行此操作
#!/usr/bin/ruby
require 'rubygems'
require 'highline/import'
require 'pty'
require 'expect'
def sudorun(command, password)
`sudo -k`
PTY.spawn("sleep 1; sudo -u root #{command} 2>&1") { | stdin, stdout, pid |
begin
stdin.expect(/password/) {
stdout.write("#{password}\n")
puts stdin.read.lstrip
}
rescue Errno::EIO
end
}
end
不幸的是,如果用户输入错误的密码,使用该代码脚本会崩溃。理想情况下,它应该让用户 3 次尝试正确获取 sudo 密码。我该如何解决?
我在 Linux Ubuntu BTW 上运行它。