我使用expect
通过ssh在远程主机中使用sudo执行一些命令。该脚本如下:
spawn ssh -q ${user}@${host}
expect "*?assword:"
send "${pass}\r"
expect "${user}@"
send "sudo ls\r"
expect "*?assword:"
send "${pass}\r"
expect "${user}@"
send "exit\r"
interac
它第一次完美运行,但是当我连续执行它时发生了一些错误。那是因为sudo
不会立即过期,所以如果sudo一些命令在短时间内两次,第二个可能不需要密码,因此上面脚本中的第二个send "${pass}\r"
失败!
那么当sudo没有过期时,我们怎样才能检测到并避免发送密码?谢谢!
答案 0 :(得分:4)
修改脚本,以便期望sudo密码是可选的:
send "sudo ls\r"
expect {
"*?assword:" {
send "$pass\r"
exp_continue
}
"$user@" {
send "exit\r"
}
}
interac
答案 1 :(得分:2)
在记录后立即清除运行sudo -k
的sudo身份验证缓存。