sudo cmd через ssh с ожиданием дважды подряд - PullRequest
4 голосов
/ 03 ноября 2011

Я использовал expect, чтобы выполнить некоторую команду с sudo на удаленном хосте через 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 ]

4 голосов
/ 03 ноября 2011

Измените сценарий так, чтобы ожидание пароля sudo было необязательным:

send "sudo ls\r"
expect {
    "*?assword:" {
        send "$pass\r"
        exp_continue
    }
    "$user@" {
        send "exit\r"
    }
}
interac
2 голосов
/ 03 ноября 2011

Очистить кеш аутентификации sudo, работающий sudo -k сразу после регистрации.

...