Поскольку моя компания настаивает на использовании sudo, мне нужно отказаться от системы ssh, которую я создал для запуска удаленных команд.
У меня есть скрипт, который подключается к серверу, sudo в учетную запись владельца экземпляра db2, а затем запускает скрипт (ранее доставленный в / tmp). Может быть, 1 из 10 раз это будет работать (выводит «Hello world» для моего теста).
Вот скрипт ksh на удаленном сервере (/tmp/cwow/generic.ksh):
#!/usr/bin/ksh93
echo "Hello world"
[Я также пытался добавить сон 5 и ждать со смешанными результатами, но это не решает проблему]
Локальный сценарий ожидания, который я запускаю:
#!/usr/bin/expect
set spath /tmp/cwow/generic.ksh
set pass $env(MYEXPECTPASS)
set user $env(MYEXPECTUSER)
if { [llength $argv] != 2 } {
send_user "USAGE: $argv0 host inst\n"
exit
}
set host [lindex $argv 0]
set inst [lindex $argv 1]
set timeout 10
log_user 1
exp_internal 0
eval spawn /usr/bin/ssh -t $user@$host "sudo su - cwow"
expect {
timeout { send_user "TimedOut"; exit }
-glob "assword:" {
send "$pass\r"
expect {
-glob "assword:" {
send "$pass\r"
expect {
-glob " " {
send "/tmp/cwow/generic.ksh\r\n"
expect {
-glob "world" {
send_user "Got it\r"
}
}
}
}
}
}
}
}
Я должен также отметить, что я никогда не получаю сообщение «Понял», но мне это не нужно, просто любопытно, почему это не так. Что мне нужно для надежной работы - это чтобы скрипт работал, и в большинстве случаев он не работает.
Любые идеи для слабых ожидаемых пользователей будут с благодарностью.