一部の部分を通常のユーザーとして実行し、他の部分をスーパー ユーザーとして実行する必要があるスクリプトを作成する必要があることがよくあります。同じスクリプトを 2 回実行して sudo として実行するという SO に関する同様の質問を 1 つ知っていますが、それでは十分ではありません。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で実行しています。