我正在尝试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