我试图连接openvpn的Windows客户端在Ubuntu上运行的openvpn服务器。 使用“仅证书”身份validation时,VPN工作正常。 但是当尝试使用下面的脚本进行身份validation时,客户端上出现错误:
Mon Jan 21 14:59:07 2013 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1) Mon Jan 21 14:59:07 2013 AUTH: Received AUTH_FAILED control message Mon Jan 21 14:59:07 2013 TCP/UDP: Closing socket Mon Jan 21 14:59:07 2013 SIGTERM[soft,auth-failure] received, process exiting
vpn_user.sh是一个可执行文件,可由server.conf文件访问。
任何援助表示赞赏。
这里是身份validation脚本:
#!/bin/sh #vpn_user.sh ALLOWED_USER="user1" ALLOWED_PASS="password1" echo "$username" echo "$password" if ["$username"=="$ALLOWED_USER"] && ["$password"=="$ALLOWED_PASS"] then exit 0 fi exit 1
服务器configuration:
#server.conf port 1194 proto udp dev tap0 client-cert-not-required auth-user-pass-verify vpn_user.sh via-env script-security 3 username-as-common-name tmp-dir /dev/shm ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem ifconfig-pool-persist ipp.txt server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 client-to-client duplicate-cn keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log log openvpn.log verb 3
客户端configuration
client dev tap proto udp remote 10.xx.xx.xx 1194 auth-user-pass resolv-retry infinite persist-key persist-tun ca ca.crt dh dh1024.pem comp-lzo verb 3
1.你输入的脚本在行中缺少空格,应该是:
if [ "$username" == "$ALLOWED_USER" ] && [ "$password" == "$ALLOWED_PASS" ]
脚本执行时显示什么? 这里是我的测试例子:
# username=user1 password=password1 ./vpn_user.sh && echo "authentication OK" || echo "Authentication failed" user1 password1 authentication OK # username=user1 password=wrong-pass ./vpn_user.sh && echo "authentication OK" || echo "Authentication failed"** user1 wrong-pass Authentication failed
2.同时检查你的server.conf
。 您可能需要将脚本的完整路径
这是重要的部分:
auth-user-pass-verify /full/path/to/vpn_user.sh via-env script-security 3
3. Chroot执行可能会造成困难。
如果您在chroot下运行openvpn,那么您的脚本需要在chroot-ed过程中可见,还需要提供shell脚本以及任何所需的库。 在这种情况下,你需要在chroot下chroot和测试脚本的执行。
这可能是棘手的,对我来说这个快速的解决方案是编写自己的小程序和编译(如静态 – 不需要外部库)。
准确的指令,编码,编译指令等 – 应该仍然可用:
http://openbsdsupport.org/openvpn-on-openbsd.html
甚至更好 – 尝试直接去相关部分:
http://openbsdsupport.org/openvpn-on-openbsd.html#AuthenticationVariant1simple
4. Openvpn客户端还需要配置为使用密码认证。
验证客户端的配置client-config.ovpn
的选项
password auth-user-pass
root @ myserver:/ var / www#cat /tmp/quickAuth.sh
#!/bin/bash #vpn_user.sh ALLOWED_USER="user" ALLOWED_PASS="password" echo "$username" echo "$password" echo $ALLOWED_USER echo $ALLOWED_PASS if [[ "$username" == "$ALLOWED_USER" && "$password"="$ALLOWED_PASS" ]] then exit 0 else exit 1 fi
客户端配置
client dev tun proto udp remote remote ip server 1194(server port) resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun mute-replay-warnings ca ca.crt cert client.crt key client.key ns-cert-type server auth-user-pass comp-lzo route xxx.xxx.xxx.xxx 255.255.255.255 the ip that i want to route throw the openvpn(if default was not made) verb 3
prb用sh脚本