向通过 start-stop-daemon 启动的 openconnect 提供密码

向通过 start-stop-daemon 启动的 openconnect 提供密码

我正在尝试openconnect通过利用以下内容的 Debian init 脚本来启动start-stop-daemon

DAEMON=/usr/sbin/openconnect
DAEMON_ARGS="<endpoint> --script /etc/vpnc/vpnc-script --user <user> --pid-file $PIDFILE --passwd-on-stdin"
PASSWORD=`cat /etc/openconnect/<endpoint>.passwd`
start-stop-daemon --start --pidfile "$PIDFILE" --exec "$DAEMON" -- $DAEMON_ARGS <<< ${PASSWORD}

不幸的是,openconnect 在启动时仍然会提示输入密码,因为它似乎无法读取重定向到 stdin 的密码。

有任何想法吗?

答案1

我最终为 openconnect 创建了一个包装脚本,它加载密码并将其传送到 openconnect 守护进程的标准输入,换句话说:

/bin/bash #!/bin/bash

PASSWD =`/bin/cat /etc/openconnect/passwd`

/bin/echo $PASSWD|/usr/sbin/openconnect $@

并且 start-stop-daemon 调用这个包装器而不是 openconnect。

答案2

openconnect(至少在 5.02 版本中)允许您在 STDIN 上提供密码。

来自手动的

--passwd-on-stdin

    Read password from standard input

因此你可以使用:

echo 'password1' | openconnect --passwd-on-stdin ...

答案3

我的包装器启动/停止脚本。可能是一种更好的方法,但它效果很好。

#!/bin/bash

username="myuser"
password="password"
url="https://url.tosomewhere.se"
pidfile="/tmp/openconnect-pid"

case "$1" in
start)
    #bad certs
    #echo "$password" | openconnect -b --pid-file=$pidfile --no-cert-check --user=$username $url
    echo "$password" | openconnect -b --pid-file=$pidfile --user=$username $url
    ;;
stop)
    cat $pidfile  | xargs kill -2
    ;;
*)
    echo "$0 <start|stop>"
    exit 1
esac

答案4

我创建了一个密码文件,然后运行此命令:

echo $(sudo cat /usr/local/etc/openconnect/password) | sudo /usr/local/sbin/openconnect --protocol=gp vpn.myconpany.br -u myusername --passwd-on-stdin

相关内容