linux - 我无法让我的期望脚本以 "expected"运行远程 bash 脚本

标签 linux bash tcl expect

我正在尝试运行一个 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

期望脚本运行,但我得到以下输出:

 /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"

行来自远程系统的 shell。

我的 expect 脚本现在看起来像这样:

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 "#"

到目前为止,它完成了工作..

关于linux - 我无法让我的期望脚本以 "expected"运行远程 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090475/

相关文章:

linux - 如何防止在 $PATH 上找到可执行文件?

linux - 在 bash 中搜索文件中的单词,如果该单词存在则执行某些操作

java - Ant:将路径添加到 bash 脚本中的 java 类

string - 当参数可以是列表或字符串时,TCL使用 “eq”或 “==”

regex - 如何在 tcl 中检查和替换非 UTF-8 字符?

TCL proc 和字节码编译 - 链接是什么?

linux - 为什么这行 Shell 在 eval() 中有效但在 bash 中失败

linux - 获取服务器当前负载状态并每2分钟刷新一次的shell脚本

bash - 如何将字符串作为单个参数传递给 sbcl

linux - BASH:在后台运行 script.sh 并将该实例的 pid 输出到文件?