Как запустить SSH-скрипт с ожиданием?

#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.