linux 使用Bash启动和停止openconnect

oknwwptz  于 2023-03-17  发布在  Linux
关注(0)|答案(2)|浏览(213)

我正在努力实现以下目标:

  • ./vpnconnect.sh start应与服务器建立VPN连接。
  • ./vpnconnect.sh stop应终止VPN连接。

下面是尝试的shell脚本,它没有按预期工作。它给出了错误:

~$ ./vpnconnect.sh stop
Stopping VPN connection:
./vpnconnect.sh: 22: ./vpnconnect.sh: root: not found
./vpnconnect.sh: 26: ./vpnconnect.sh: 14128: not found

脚本:

#!/bin/sh
#
#
#
#

PIDOCN=""
VAR2=""

# Start the VPN
start() {
         echo "Starting VPN Connection"
         eval $(echo 'TestVpn&!' | sudo openconnect -q -b --no-cert-check 127.0.0.1 -u myUser --passwd-on-stdin)
        success $"VPN Connection established"
}

# Stop the VPN
stop() {
        echo  "Stopping VPN connection:"
        VAR2=eval $(sudo ps -aef | grep openconnect)
        echo $VAR2
        eval $(sudo kill -9 $VAR2)

        PIDOCN=eval $(pidof openconnect)
        echo $PIDOCN
        eval $(sudo kill -9 $PIDOCN)
}

### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status openconnect
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac

exit 0
iaqfqrcu

iaqfqrcu1#

错误消息:

./vpnconnect.sh: 22: ./vpnconnect.sh: root: not found
./vpnconnect.sh: 26: ./vpnconnect.sh: 14128: not found

来自这些行:

VAR2=eval $(sudo ps -aef | grep openconnect)
PIDOCN=eval $(pidof openconnect)

这几行是没有意义的,shell获取$(...)子shell的输出,并试图将它们作为命令执行,同时将VAR2PIDOCN变量设置为“eval”,这肯定不是您想要的。
也许你正在寻找更像这样的东西:

stop() {
    echo  "Stopping VPN connection:"
    sudo ps -aef | grep openconnect
    sudo kill -9 $(pidof openconnect)
}
lqfhib0f

lqfhib0f2#

eval存在此问题:

VAR2=eval $(sudo ps -aef | grep openconnect)

这里,eval将尝试执行sudo ps -aef | grep openconnect命令的输出,这就是您看到错误的原因。
将其改写为:

VAR2=$(sudo ps -aef | grep openconnect)

它只是将sudo命令管道的输出赋给VAR2变量,但是,您不能将VAR2用作kill的参数,因为它包含了其他标记,如用户名沿着PID。
在其他地方,你正在做eval $(command),所有你需要的是command
您可以使用pkill openconnect终止任何现有的openconnect进程,而不是找出PID并对其发出killpgreppkill对于像您这样的启动/停止/重新启动脚本非常方便。

相关问题