как запустить локальный скрипт на удаленном сервере с помощью expect и bash script

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

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

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

если да, как указать сценарий, за что я буду благодарен вам .

до сих пор мой скрипт

#!/usr/bin/expect
set ip neviss
set user user
set password 1234
spawn ssh "$user@$ip"
expect "Password:"
send "$passwordr";
interact ( after this line any command is not getting executed) 
ls -lrt 
15
задан Hennes
28.11.2022 1:55 Количество просмотров материала 3222
Распечатать страницу

3 ответа

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

#!/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".

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

2
отвечен bourne 2022-11-29 09:43

вам не нужно вызывать Interact для отправки команды. Вместо этого 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"
0
отвечен maganap 2022-11-29 12:00

вы можете позволить ssh сделать большую часть работы. Предполагая ваш локальный скрипт bash-скрипт в файл с именем "Local.сценарий":

#!/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
отвечен glenn jackman 2022-11-29 14:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх