sudo命令通过ssh连续两次

时间:2011-11-03 06:16:17

标签: ssh expect sudo

我使用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没有过期时,我们怎样才能检测到并避免发送密码?谢谢!

2 个答案:

答案 0 :(得分:4)

修改脚本,以便期望sudo密码是可选的:

send "sudo ls\r"
expect {
    "*?assword:" {
        send "$pass\r"
        exp_continue
    }
    "$user@" {
        send "exit\r"
    }
}
interac

答案 1 :(得分:2)

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

相关问题