簡體   English   中英

我無法獲得期望腳本以“預期”方式運行遠程bash腳本

[英]I cant get my expect script to run remote bash script as “expected”

我正在嘗試運行Expect腳本,該腳本應在遠程linux服務器上運行bash腳本。 bash腳本旨在根據通過Expect腳本發送的自變量重新啟動Strongswan IPSec隧道。 這是我的期望腳本:

#log_user 0

set prompt {\$ >}
expect -re $prompt

set ip 192.168.0.1
set user user
set password 4p4ssw0rd
set target [lindex argv 0]

spawn ssh -p 2228 "$user\@$ip"
expect "password:"
send "$password\r";
expect ">"

send "su -\r"
expect "Password:"
send "$password\r"
expect "#"

send "sh /usr/local/bin/ipsec_fixer.sh $target; exit\r"
expect "#"

這是遠程腳本:

target=$1

if [[ -n "$target" ]]; then
        value=`grep -i $target /etc/ipsec.conf -A1  |awk '{print $2}'| tail -n 2 | sed 's/0$//'`
        declare -a args
        args=(  $(grep "$value"* /etc/ipsec.conf | awk '{print $2}') )
        for each in ${args[@]}; do ipsec down $each; sleep 3;  ipsec up $each ; done
else   
        exit 2
fi

Expect腳本將運行,但是我得到以下輸出:

 /usr/local/bin/fix_ipsec avpnconnection
spawn ssh -p 2228 user@192.168.0.1
user@192.168.0.1's password: 
Last login: Sun Dec 11 05:40:55 2016 from 192.168.0.232
sh /usr/local/bin/ipsec_fixer.sh argv; exit
021 no connection named "-c"
021 no connection named "-c"
021 no connection named "-c"
021 no connection named "-c"
logout
user@remote:/home/login >

我不知道發生了什么。 請問我做錯了什么?

我想我已經弄清楚了:看起來很奇怪

021 no connection named "-c"
021 no connection named "-c"
021 no connection named "-c"
021 no connection named "-c"

線路來自遠程系統的外殼。

我的期望腳本現在看起來像這樣:

set script /usr/local/bin/ipsecfixer.sh

spawn ssh -p 2228 $user@$ip

expect "password:"
send "$password\r";
expect ">"

send "su -\r"
expect "Password:"
send "$password\r"
expect "#"
send "/bin/bash $script $argv\r"
expect "#"

到目前為止,它已經完成了工作。

你可以用

ssh -t -p 2228 user@192.168.0.1 "sudo /bin/sh /usr/local/bin/ipsec_fixer.sh $target"

並使用SSH基於密鑰的身份驗證

至於收到的消息,您啟動的腳本是否可能影響當前的SSH連接?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM