Я хочу создать скрипт, который будет подключаться к серверу, выполнять некоторые операции CRUD на сервере и снова возвращаться к локальному. Я не хочу загружать скрипт на сервер ..

Я сделал скрипт, который поможет подключиться к серверу, но я не могу выполнить какую-либо операцию с помощью скрипта.

пожалуйста, проясните мои сомнения относительно того факта, что можно запустить локальный скрипт (как в моем случае) на удаленном сервере.

Если да, то, пожалуйста, укажите сценарий, за который я буду вам благодарен.

до сих пор мой сценарий

#!/usr/bin/expect
set ip neviss
set user user
set password 1234
spawn ssh "$user\@$ip"
expect "Password:"
send "$password\r";
interact ( after this line any command is not getting executed) 
ls -lrt 

3 ответа3

2

Попробуйте что-то вроде этого:

#!/usr/bin/expect
spawn ssh usert@server
expect "user@server's password:" {send "$password\r"}
expect "$ " {send "hostname\n"}
expect "$ " {send "ls -alrth\n"}
expect "$ " {send "exit\n"}

Не уверен, что это самый эффективный способ сделать это, но, похоже, это работает в моем тесте. (пробелы после $)

Кроме того, вы можете поместить это в начало вашего скрипта "exp_internal 1".

Это поможет в процессе отладки!

0

Вы можете позволить ssh выполнять большую часть работы. Предполагая, что ваш локальный скрипт - это скрипт bash, он находится в файле с именем local.script:

#!/usr/bin/expect
set ip neviss
set user user
set password 1234
set script local.script

# here I spawn a shell that will run ssh and redirect the script to ssh's stdin

spawn sh -c "ssh $user@$ip bash < $script"

expect "Password:"
send "$password\r"

# and just wait for the script to finish
expect eof

Обратите внимание, что @ не является специальным символом в Tcl и не требует экранирования.

0

Вам не нужно вызывать Interact, чтобы отправить команду. Взаимодействие ждет вашего ввода вместо.

Вот рабочий пример запуска сценария «test.sh» на удаленном сервере (также вызывающего несколько других команд просто для иллюстрации идеи), который также решает другую проблему приглашения пользователя / пользователя root. Не забудьте сделать test.sh исполняемым.

#!/usr/bin/expect

set prompt "(%|#|\\$) $"
set ip neviss
set user user
set password 1234

spawn ssh "$user\@$ip"
expect "assword:"
send "$password\r";
expect -re $prompt
send -- "ls -l\r"
expect -re $prompt
send -- "./test.sh\r"
expect -re $prompt
send -- "sleep 5\r"
expect -re $prompt
send -- "exit\r"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .