Используйте STDOUT в качестве ввода для openvpn auth-user-pass

Я пишу сценарий bash для автоматического подключения к бесплатной службе openvpn VPNBook. Я собираю имя пользователя и пароль, вызывая скрипт 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)  

STDOUT скрипта Python:

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.


person jamiejackherer    schedule 08.10.2015    source источник
comment
Взгляните на expect   -  person anishsane    schedule 08.10.2015


Ответы (1)


Взгляните на параметр --auth-user-pass (здесь).

Вероятно, самый простой способ для вас — удалить строку с "Комбинация имени пользователя и пароля:" из вашего скрипта 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.

См. этот вопрос.

РЕДАКТИРОВАТЬ>

Подтверждено, что это работает (для меня):

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

Используется в Баше:

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], построенный 1 декабря 2014 г.
Версии библиотеки: OpenSSL 1.0.1k 8 января 2015 г. , LZO 2.08
Первоначально разработан Джеймсом Йонаном
Copyright (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= неизвестно enable_dlopen_self_static=неизвестно enable_fast_install=да enable_fragment=да enable_http_proxy=да enable_iproute2=да enable_libtool_lock=да enable_lzo=да enable_lzo_stub=нет enable_maintainer_mode=нет enable_management=да enable_multi=да enable_multihome=да enable_kpam_dlopen=нет enable_pped_psword enable1_f=нет enable_save=да =да enable_plugin_auth_pam=да enable_plugin_down_root=да enable_plugins=да enable_port_share=да enable_selinux=нет enable_server=да enable_shared=да enable_shared_with_static_runtime s=нет enable_small=нет enable_socks=да enable_ssl=да enable_static=да enable_strict=нет enable_strict_options=нет enable_systemd=да enable_win32_dll=да enable_x509_alt_username=да с_crypto_library=openssl с_gnu_ld=да с_ifconfig_path=/sbin/ifconfig с_iproute_path=/membin/ip= с нет with_plugindir='${prefix}/lib/openvpn' with_route_path=/sbin/route with_sysroot=no
Версия git: refs/heads/jessie/b35ad09bfc4a26e7

(Обратите внимание на enable_password_save=yes)

Выход bash --version:

GNU bash, выпуск версии 4.3.30(1) (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или более поздней http://gnu.org/licenses/gpl.html

Удачи!

person vlp    schedule 09.10.2015
comment
Первый из ваших вариантов кажется лучшим, но выдает ошибку Fri Oct 9 15:07:22 2015 SENT CONTROL [vpnbook.com]: 'PUSH_REQUEST' (status=1) Fri Oct 9 15:07:23 2015 AUTH: Received control message: AUTH_FAILED Fri Oct 9 15:07:23 2015 SIGTERM[soft,auth-failure] received, process exiting - person jamiejackherer; 09.10.2015
comment
Удалили ли вы строку print('The username and password combinantion is:') (т.е. выводил ли python правильный формат)? Возможно, добавление --verb 3 могло бы показать используемые учетные данные (это должно быть в соответствии с errlevel. ч) - person vlp; 09.10.2015
comment
да, я удалил строку, и --verb 3 выдал идентичный результат. - person jamiejackherer; 09.10.2015
comment
@vip спасибо, я поработаю над этим сегодня и дам вам знать, как у меня снова дела.. Спасибо - person jamiejackherer; 10.10.2015
comment
@jamiejackherer у тебя получилось? - person vlp; 28.10.2015