Я пытаюсь запустить сценарий ожидания, где он делает цикл foreach в именах хостов, затем делает ssh в узлах и получает техническую поддержку. Каждый узел имеет переменное время для вывода информации о технической поддержке.Ожидайте, скрипт не работает в цикле для ssh
Usage:
./test.sh admin password
Filename: hostnames.txt
node1
Сценарий: test.sh
#!/usr/bin/expect
set exp_internal 1
set timeout 4
set user [lindex $argv 0]
set password [lindex $argv 1]
set rootdir /home/$user
set f [open "$rootdir/hostnames.txt"]
set hosts [split [read $f] "\n"]
close $f
log_user 1
foreach host $hosts {
puts $host
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null "[email protected]$host"
expect "*assword: "
send "$password\r"
expect "#"
send "file md /TS/\r"
expect "#"
send "admin tech-support /TS/$host.ts1\r"
expect "#"
sleep 180
expect "#"
send "logout\r"
expect eof
close $spawn_id
}
Я получаю ошибку, как показано ниже, есть только узел в файле hostnames.txt, но он возвращает ошибку когда техподдержка завершается в node1. так что не уверен, если он будет работать для другого узла, если добавлено в hostnames.txt файле
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null [email protected]
ssh: : Name or service not known
send: spawn id exp6 not open
while executing
"send "$password\r""
("foreach" body line x)
invoked from within
"foreach host $hosts {
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHost..."
(file "./test4.sh" line x)
Привет, Тим, спасибо за обновление, я понял, что ... я добавил чек там "if {[string length $ host]! = 0}" .... теперь atleast i dont get ssh error но im все равно получить ошибку "отправить: spawn id exp6 not open" – user3897774
В выводе, который вы показали в вопросе, он выглядел так, как $ host был пуст - разве это все еще так? И работает ли он правильно для node1? Вот что я понял из вашего первоначального вопроса. Является ли "if {[длина строки $ host]" ... частью, охватывающей весь корпус цикла foreach, или просто командой spawn? Извините, я не совсем понимаю, где это для вас. –
Я не уверен, почему он забирает пустую строку ... У меня нет другой записи, кроме node1 в этом файле ..... теперь после того, как поместить это, если проверить ..... я не получаю ошибку ... i поместите этот оператор if до появления в цикле foreach .... – user3897774