预期和 sudo 超时

预期和 sudo 超时

我有一个主 shell 脚本,提示用户输入密码。然后我想在将密码传递给它时调用一个 expect 脚本。这个 expect 脚本将运行 3 个 sudo 命令。

我知道我的脚本将在其上运行的 Linux 机器的 sudoers 中将 timestamp_timeout 设置为某个值。我的问题是,我大致知道如何编写此期望,但不知道如何处理以下情况:

1) 我可以将密码发送给第一个 sudo 命令。此 sudo 将删除一个大型目录,删除可能需要几分钟,并且可能大于或不大于设置的 timestamp_timeout 值。那么,我如何才能使第二个和第三个 sudo 命令的密码提示成为可选的。

2) 假设由于某种奇怪的原因脚本终止或用户中止了它。当他尝试再次运行它时,我们仍然在 timestamp_timeout 的时间内。这要求第一个命令的预期密码也是可选的。

这是我目前所拥有的:

 #!/usr/bin/expect

set password [lindex $argv 0]
spawn sudo rm -rvf /mnt/repo
expect "*?assword:*"
send "$password\r"
send "sudo mkdir -v /mnt/hwrrepo"
expect "*?assword:*"
send "$password\r";
send "sudo chmod -R 777 /mnt/hwrrepo"
expect "*?assword:*"
send "$password\r";
interact

答案1

我最终使用 sudo 的 -k 标志来使时间戳无效。所以我只是将该标志添加到每个 sudo 调用中并让 expect 传递密码。

相关内容