我试图通过使用start-stop-daemon的Debian init脚本启动openconnect :
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在启动过程中仍然会提示input密码,因为它似乎无法读取redirect到stdin的密码。
有任何想法吗?
我最终为openconnect创build了一个包装脚本,它加载密码并将其传递给openconnect守护进程的标准input,IOW:
#!/斌/庆典 PASSWD =`/ bin / cat / etc / openconnect / passwd` / bin / echo $ PASSWD | / usr / sbin / openconnect $ @
start-stop-daemon调用这个包装器而不是openconnect。
我的包装开始/停止脚本。 也许是一个更好的方法,但嘿它运作良好。
#!/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
openconnect (至less在版本5.02中)确实允许你在STDIN上提供密码。
从手册 :
--passwd-on-stdin Read password from standard input
所以你可以使用:
echo 'password1' | openconnect --passwd-on-stdin ...
这是一个古老的线程,但我最近需要解决它。 gentoo中的openconnect intit脚本与当前稳定的openconnect-4.08相同。 我通过将start-stop-daemon start命令修改为:
start-stop-daemon --start --make-pidfile --pidfile "${VPNPID}" \ --stderr "${VPNERRFILE}" --stdout "${VPNLOGFILE}" \ --background --exec /bin/bash \ -- -c "exec /usr/sbin/openconnect --pid-file=\"${VPNPID}\" ${!VPNOPTS} ${!SERVER} <<< \`echo \"${!PASSWORD}\"\`"
( --startas在openconnect-4.08中被弃用)
我创build了一个密码文件,然后运行这个命令:
echo $(sudo cat /usr/local/etc/openconnect/password) | sudo /usr/local/sbin/openconnect --protocol=gp vpn.myconpany.br -u myusername --passwd-on-stdin