выполнить локальный скрипт на удаленном сервере в ожидаемом - PullRequest
0 голосов
/ 16 мая 2018

Я хочу выполнить свой локальный сценарий на удаленном сервере.

#!/usr/bin/expect -f
set idNhost [lindex $argv 0]
set password [lindex $argv 1]
eval spawn ssh $idNhost \'bash -s\' < a.sh
expect -re "password"
send "$password\r"
interact

Но ожидайте, что каждый аргумент будет интерпретирован как один комментарий.Так что найдите скрипт на удаленном сервере.

Пожалуйста, помогите мне ....

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы можете сначала отправить свой скрипт на удаленный сервер, затем присоединить оболочку и выполнить его оттуда.Наконец, было бы чище удалить ваш скрипт с удаленного сервера.Следующая процедура предназначена для этой цели.

proc exect_on_shell { script_name user ip pass dir } {
    spawn scp $script_name $user@$ip:$dir/$user 
    expect  "password:" 
    send "$pass\r"
    expect eof

    puts "running $script_name"
    #Attach shell
    puts "Connecting to the machine $ip for user $user"
    spawn ssh $user@$ip

    expect "yes/no" {
                send "yes\r"
                expect "*?assword" { send "$pass\r"}
            } "*?assword" { send "$pass\r"}

    #regular expression to match prompt
    expect -re {\$ $}

    send "su - root\r"
    expect {
        "Password: " {send "$pass\r"}
    }

    send "cd $dir/$user\r"
    send "chmod +x $script_name\r"
    send "$script_name\r"

    send "rm -rf $script_name\r"
    #logout from root   
    send "exit\r"
    #logout from user
    send "exit\r"
    expect eof
}

Вы можете назвать это как в следующем фрагменте.

exect_on_shell "your_script.sh" "user_name" "192.168.2.3" "pass" "home/user_name"
0 голосов
/ 16 мая 2018

Попробуй так:

spawn bash -c "ssh $idNhost bash -s < a.sh"
...