#linux #ssh #expect
#linux #ssh #ожидать
Вопрос:
Я могу выполнить команду на удаленном SSH-хосте с ожиданием. Все в порядке, пока я ограничиваюсь однострочной жестко запрограммированной командой.Тем не менее, я хотел бы создать сценарий локальной команды для удаленного выполнения.
Это работает, но только с однострочной командой:
#!/usr/bin/expect
set USER [lindex $argv 0]
set PASSWORD [lindex $argv 1]
set CMD [lindex $argv 2]
set timeout 10
spawn ssh -o StrictHostKeyChecking=no "$USER" "$CMD"
expect {
timeout {
puts "Timeout happened"
exit 8
}
eof {
puts "EOF received"
exit 4
}
-nocase "password:" {
send "$PASSWORDn"
expect {
"keys" {
exit 200
}
-nocase "password:" {
exit 1
}
}
}
}
Этот не работает:
#!/usr/bin/expect
set USER [lindex $argv 0]
set PASSWORD [lindex $argv 1]
set timeout 10
spawn ssh -o StrictHostKeyChecking=no "$USER" < /var/myscript.sh
# This don't work! ^^^^^^^^^^^^^^^^^^^
expect {
timeout {
puts "Timeout happened"
exit 8
}
eof {
puts "EOF received"
exit 4
}
-nocase "password:" {
send "$PASSWORDn"
expect {
"keys" {
exit 200
}
-nocase "password:" {
exit 1
}
}
}
}
Ответ №1:
<
есть ли синтаксис оболочки, чтобы вы могли сделать так:
spawn bash -c "ssh -o StrictHostKeyChecking=no $USER < /var/myscript.sh"
Комментарии:
1. Я бы использовал
sh
себя, он должен запускаться на несколько миллисекунд быстрее, чем bash.