使用STDOUT作为openvpn auth-user-pass的输入

时间:2015-10-08 12:26:40

标签: python linux bash scripting openvpn

我正在编写一个bash脚本来自动连接到VPNBook的免费openvpn服务。我通过调用python脚本来收集用户名和密码,该脚本目前只是将它们打印到STDOUT。

收集用户名和密码的python脚本是:

#!/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)  

python脚本的STDOUT是:

The username and password combinantion is:
vpnbook  
JE5Raphu  

到目前为止的bash脚本:

# !/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

然后运行最后一个命令openvpn --config vpnbook-euro1-tcp443.ovpn并要求我输入这样的用户名和密码:

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:  

如何让我的脚本输入使用python脚本收集的用户名和密码?

我不介意这是一个bash或python脚本,所有选项都是打开的,但必须是bash或python。

1 个答案:

答案 0 :(得分:1)

查看--auth-user-pass选项(here)。

最简单的方法是从你的python脚本中删除“用户名和密码组合:”的行,然后从openvpn开始bash (适合我):

openvpn --config vpnbook-euro1-tcp443.ovpn --auth-user-pass <( python ~/vpnbook-user-pass )

通常,如:

openvpn --config vpnbook-euro1-tcp443.ovpn --auth-user-pass <( echo -e "${userName}\n${password}" )

应该也适用(适合我)。

或者,您可以将凭据保存到文件中(确保它不是世界可读的),并在--auth-user-pass之后将此文件作为参数传递。

请参阅this question

编辑&gt;

确认这是有效的(对我来说):

#!/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)

用于bash:

openvpn --config vpnbook-euro1-tcp443.ovpn --auth-user-pass <( ./fvpn3.py )

openvpn --version的输出:

  

OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL(OpenSSL)] [LZO] [EPOLL]   [PKCS11] [MH] [IPv6]建立于2014年12月1日
  库版本:OpenSSL   1.0.1k 2015年1月8日,LZO 2.08
  最初由James Yonan开发   版权所有(C)2002-2010 OpenVPN Technologies,Inc。
  编译时定义: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 =无
  git revision:refs / heads / jessie / b35ad09bfc4a26e7

(请注意enable_password_save=yes

bash --version的输出:

  

GNU bash,版本4.3.30(1)-release(x86_64-pc-linux-gnu)
  版权   (C)2013 Free Software Foundation,Inc。
  许可证GPLv3 +:GNU GPL   版本3或更高版本http://gnu.org/licenses/gpl.html

祝你好运!