Как запустить скрипт SSH с ожидаемым? - PullRequest
0 голосов
/ 15 апреля 2019

Я могу выполнить команду на удаленном хосте 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 "$PASSWORD\n"
                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 "$PASSWORD\n"
                expect {
                        "keys" {
                        exit 200
                                }
                        -nocase "password:" {
                                        exit 1
                                        }
                        }
                }
}

1 Ответ

2 голосов
/ 15 апреля 2019

< - это синтаксис оболочки, поэтому вы можете сделать так:

spawn bash -c "ssh -o StrictHostKeyChecking=no $USER < /var/myscript.sh"
...