Это продолжение моего предыдущего вопроса:Команда Spawn не найдена
Ссылаясь на несколько старых постов, я написал эти команды. Если это неверно, то как я могу запустить ssh на удаленном сервере и выполнить некоторые команды?
решение1
Одна из возможностей: создать файл expect-syntax и вызвать его через скрипт оболочки:
#!/bin/bash
expect -f my-file.exp $1 # parameter 1 is the server name
В my-file.exp вам потребуются только команды:
spawn ssh "username@[lindex $argv 0]" # param 1 : server name
# expect now reads the input and does what you tell it on certain patterns
expect {
"password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
"done" { send_user "exiting"; }
}
В этом примере выполняется вход на сервер, отправка открытого пароля, затем отправка некоторой команды и продолжение работы.
Если на входе отображается «готово», процесс завершается. В противном случае через несколько секунд произойдет тайм-аут.
Пока вы выполняете «exp_continue», он остается внутри цикла expect {}, сопоставляя входные данные и выполняя соответствующий вывод.
решение2
Вы также можете использовать expect shebang в своем скрипте оболочки и написать ожидаемый скрипт.
#!/usr/bin/expect -f
spawn ssh localhost
expect "password: "
send "password\r"
expect "{[#>$]}" #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...