2011-11-03 55 views
4

我用expect通过ssh在远程主机上执行sudo命令。该脚本在于如下:sudo cmd通过ssh预期连续两次

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不过期时发送密码?谢谢!

回答

2

清理记录后立即运行sudo -k的sudo身份验证缓存。

4

修改脚本,使期待的输入sudo密码是可选的:

send "sudo ls\r" 
expect { 
    "*?assword:" { 
     send "$pass\r" 
     exp_continue 
    } 
    "[email protected]" { 
     send "exit\r" 
    } 
} 
interac