Reputation: 133
I am writing a bash script to automatically connect to VPNBook's free openvpn service. I gather the username and password by calling a python script which currently just prints them to STDOUT.
The python script to gather the username and password is:
#!/bin/python
# title: vpnbook-user-pass©
# description: Gather vpnbooks username - password combinantion
# author: jack herer
# date: Tuesday 06 October 2015 @ 10:29:14 am
# version: v1.0
# usage: python vpnbook-user-pass
# notes: ~
# bash version: 4.3.30(1)-release
#========================================
# Copyright © | jack herer | 2015
#========================================
from bs4 import BeautifulSoup
import requests
response = requests.get('http://vpnbook.com/freevpn')
soup = BeautifulSoup(response.text, 'html.parser')
pricing = soup.find(id = 'pricing')
first_column = pricing.find('div', {'class': 'one-third'})
for li in first_column.find('ul', {'class': 'disc'}):
if 'username' in str(li).lower():
username = li.find('strong').text
print('The username and password combinantion is:')
print(username)
response = requests.get('http://vpnbook.com/freevpn')
soup = BeautifulSoup(response.text, 'html.parser')
pricing = soup.find(id = 'pricing')
first_column = pricing.find('div', {'class': 'one-third'})
for li in first_column.find('ul', {'class': 'disc'}):
if 'password' in str(li).lower():
password = li.find('strong').text
print(password)
The STDOUT of the python script is:
The username and password combinantion is:
vpnbook
JE5Raphu
The bash script so far:
# !/bin/bash -
# title: auto-vpn©
# description: Automatically connect to vpnbook's free vpn service
# author: jack herer
# date: Thursday 08 October 2015 @ 11:49:21 am
# version: v1.0
# usage: ./auto-vpn
# notes: ~
# bash version: 4.3.30(1)-release
#========================================
# Copyright © | jack herer | 2015
#========================================
userpass=$(python ~/vpnbook-user-pass)
echo "${userpass} "
cd $HOME/vpnbook/
openvpn --config vpnbook-euro1-tcp443.ovpn
The last command openvpn --config vpnbook-euro1-tcp443.ovpn
then runs and asks me to input a username and password like this:
Thu Oct 8 13:20:28 2015 OpenVPN 2.3.4 i586-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec 1 2014
Thu Oct 8 13:20:28 2015 library versions: OpenSSL 1.0.1k 8 Jan 2015, LZO 2.08
Enter Auth Username:
Enter Auth Password:
How can I get my script to input the username and password that is gathered with the python script?
I don't mind whether this is a bash or python script all options are open, but must be in bash or python.
Upvotes: 4
Views: 2656
Reputation: 8116
Have a look at the --auth-user-pass
option (here).
The probably easiest way for you is to remove the line with "The username and password combinantion is:" from your python script and start openvpn
from bash
this way (works for me):
openvpn --config vpnbook-euro1-tcp443.ovpn --auth-user-pass <( python ~/vpnbook-user-pass )
Generally, something like:
openvpn --config vpnbook-euro1-tcp443.ovpn --auth-user-pass <( echo -e "${userName}\n${password}" )
should work as well (works for me).
Alternatively you can save the credentials to a file (make sure it is not world-readable) and pass this file as an argument after --auth-user-pass
.
See this question.
EDIT>
Confirmed this as working (for me):
#!/usr/bin/python
from bs4 import BeautifulSoup
import requests
response = requests.get('http://vpnbook.com/freevpn')
soup = BeautifulSoup(response.text, 'html.parser')
pricing = soup.find(id = 'pricing')
first_column = pricing.find('div', {'class': 'one-third'})
for li in first_column.find('ul', {'class': 'disc'}):
if 'username' in str(li).lower():
username = li.find('strong').text
if 'password' in str(li).lower():
password = li.find('strong').text
print(username)
print(password)
Used in bash:
openvpn --config vpnbook-euro1-tcp443.ovpn --auth-user-pass <( ./fvpn3.py )
Output of openvpn --version
:
OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec 1 2014
library versions: OpenSSL 1.0.1k 8 Jan 2015, LZO 2.08
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc.
Compile time defines: enable_crypto=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_maintainer_mode=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=yes enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_ifconfig_path=/sbin/ifconfig with_iproute_path=/sbin/ip with_mem_check=no with_plugindir='${prefix}/lib/openvpn' with_route_path=/sbin/route with_sysroot=no
git revision: refs/heads/jessie/b35ad09bfc4a26e7
(Please note the enable_password_save=yes
)
Output of bash --version
:
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
Good luck!
Upvotes: 1