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

Thi*_*kel 8 debian init.d 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}
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

小智 11

我最终为 openconnect 创建了一个包装脚本,它加载密码并将其通过管道传输到 openconnect 守护进程 IOW 的标准输入:

#!/bin/bash

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

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

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


Dre*_*kes 9

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

手册

--passwd-on-stdin

    Read password from standard input
Run Code Online (Sandbox Code Playgroud)

所以你可以使用:

echo 'password1' | openconnect --passwd-on-stdin ...
Run Code Online (Sandbox Code Playgroud)


小智 6

我的包装器启动/停止脚本。可能是更好的方法,但嘿它工作得很好。

#!/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
Run Code Online (Sandbox Code Playgroud)