Авторизация OpenVPN без ввода логина и пароля



1. Ручная настройка OpenVPN-конфигураций для автоматической авторизации
2. Готовые конфигурации OpenVPN с автоматической авторизацией
3. Скрипты настройки OpenVPN-конфигураций на автоматическую авторизацию
3.1. BASH-скрипт
3.2. Batch (Bat-файл)
3.3. Perl-скрипт
3.4. PHP-скрипт
3.5. Python-скрипт
3.6. Ruby-скрипт

1. Ручная настройка OpenVPN-конфигураций


Авторизоваться при подключении к OpenVPN, не вводя логин и пароль, возможно слегка изменив конфигурационный файл выбранной цепи. Для этого достаточно открыть файл OpenVPN-конфигурации (.ovpn) через текстовый редактор и заменить строку auth-user-pass на auth-user-pass auth.txt.
...
auth-user-pass auth.txt
...

После изменения файла конфига OpenVPN-клиент (при подключении по данной конфигурации) будет запрашивать имя пользователя и пароль в файле auth.txt, расположенному в директории этого конфига. При этом, для корректной автоматической авторизации, файл auth.txt должен содержать только 2 строки: имя пользователя, записанное на первой строке, и пароль, записанный на второй строке.
username
password

Имя пользователя и пароль полностью совпадают с именем пользователя и паролем от Кабинета DeepWebVPN.

В ОС Windows для редактирования файла конфигурации НЕ следует использовать приложение Блокнот, воспользуйтесь WordPad, которое корректно отображает UNIX-подобный перенос строки.


2. Готовые конфигурации OpenVPN


DeepWebVPN предоставляет уже настроенные на автоматическую авторизацию конфигурации OpenVPN. Доступны для скачивания: архив со всеми конфигурациями, архив только с одиночными цепями (Single-цепи) и архив только с двойными цепями (Double-цепи).
После извлечения архива в директорию с конфигурациями OpenVPN доступными для VPN-клиента, следует в этой же директории создать файл auth.txt согласно описанию в разделе Ручная настройка OpenVPN-конфигураций.


3. Скрипты настройки OpenVPN-конфигураций


Представленные ниже скрипты следует записать в файл с правами на исполнение, после чего запустить в соответствующем интерпретаторе.

Пользователь, от которого запускается скрипт, должен иметь права на изменение файлов конфигурации OpenVPN.


3.1. BASH-скрипт



#!/bin/bash
# Update all OpenVPN configs for use user login and password from file
# profexer(https://rdot.org/forum/member.php?u=1143) for deepwebvpn.net, 2015

if [ $# -ne 3 ]; then
echo 'Please, enter configs dir, your name and password.'
exit
fi

if [ ! -d $1 ]; then
echo -e '\e[91mConfigs dir not exists\e[39m'
exit
fi

cd $1
if [ -f 'auth.txt' ]; then
if [ ! -w 'auth.txt' ]; then
echo -e '\e[91mPlease, fix permissions for auth.txt\e[39m'
exit
fi

read -r -p 'File auth.txt exists. Rewrite (Y/n)? ' ans
if [ "$ans" == "n" ] || [ "$ans" == "N" ]; then
exit
fi
fi

echo -e "$2\n$3" > auth.txt

for fl in *.ovpn; do
echo -n $fl
if [ ! -r $fl ]; then
echo -e "\e[91m NOT READABLE"
elif [ ! -w $fl ]; then
echo -e "\e[91m NOT WRITABLE"
else
sed -i 's/auth-user-pass/auth-user-pass auth.txt/' $fl
echo -e "\e[92m OK"
fi
echo -ne "\e[39m"
done


3.2. Batch (Bat-файл)



@echo off
SetLocal EnableDelayedExpansion
echo Update all OpenVPN configs for use user login and password from file.
echo.
Set /p dir="Enter configs dir: "
Set /p name="Enter username: "
Set /p pass="Enter password: "
for /f "DELIMS=" %%i in ('dir "%dir%\*.ovpn" /b') do (
for /f "usebackq tokens=*" %%j in ("%dir%\%%i") do (set line=%%j& (<nul set /p a=!line:auth-user-pass=auth-user-pass auth.txt!& echo.)>>"%dir%\.tmp")
del "%dir%\%%i" & ren "%dir%\.tmp" "%%i")
(<nul set /p a=%name%& echo.& <nul set /p a=%pass%) > "%dir%\auth.txt"
echo.
pause


3.3. Perl-скрипт


#!/usr/bin/perl
if (@ARGV != 3) {
print "Usage: make_auth.pl <configs dir> <username> <password>\n";
exit 1;
}
my ($config_dir, $username, $password) = @ARGV;
#if ((substr $config_dir, -1) != "/") {
$config_dir = $config_dir . "/";
#}
my @configs = glob $config_dir . "*.ovpn";
print $configs;
if (@configs < 1) {
print "No config files found in directory or not enough permissions";
exit 1;
}

foreach $config_file (@configs) {
print "Modifying $config_file\n";
open my $lines, $config_file or die "Could not open $config_file: $!";
my @config;
while(my $line = <$lines>) {
my $line_trim = $line;
$line_trim =~ s/^\s+|\s+$//g;
if ($line_trim eq "auth-user-pass") {
$line =~ s/auth-user-pass/auth-user-pass auth.txt/g;
}
push @config, $line;
}
close $lines;
open my $fh, ">", $config_file;
while (@config > 0) {
$line = shift @config;
print $fh $line;
}
close $fh;
}

open my $fh, ">", $config_dir . "auth.txt";
print $fh $username . "\n" . $password . "\n";
close $fh;

print "OK\n";


3.4. PHP-скрипт


<?php
# Update all OpenVPN configs for use user login and password from file
# profexer(https://rdot.org/forum/member.php?u=1143) for deepwebvpn.net, 2015

if($argc!=4)
die("Please, enter configs dir, your name and password.\n");

if( !is_dir($argv[1]) )
die("\033[91mConfigs dir not exists.\033[0m\n");

if( [email protected]($argv[1]) )
die("\033[91mCan't open configs dir. Please, check permissions.\033[0m\n");

if( file_exists('auth.txt') )
{
if( is_dir('auth.txt') )
die("Funny)\n");

if( !is_writable('auth.txt') )
die("\033[91mPlease, fix permissions for auth.txt\033[0m\n");

echo 'File auth.txt exists. Rewrite (Y/n)? ';
$c = fread(STDIN, 1);

if($c=='n' || $c=='N')
die;
}

file_put_contents('auth.txt', $argv[2]."\n".$argv[3]);

$fls = glob("*.ovpn");
foreach($fls as $fl)
if( !is_dir($fl) )
{
echo $fl;
if( !is_readable($fl) )
echo "\033[91m NOT READABLE\033[0m";
elseif( !is_writable($fl) )
echo "\033[91m NOT WRITABLE\033[0m";
else
{
file_put_contents($fl, preg_replace('#auth-user-pass#m', 'auth-user-pass auth.txt', file_get_contents($fl)));
echo "\033[92m OK\033[0m";
}
echo "\n";
}
?>


3.5. Python-скрипт


#!/usr/bin/python
import sys, glob

if len(sys.argv) != 4:
print "Usage: ./%s <configs dir> <username> <password>" % (sys.argv[0])
sys.exit(0)

config_dir = sys.argv[1] if sys.argv[1][-1] == "/" else sys.argv[1] + "/"
username = sys.argv[2]
password = sys.argv[3]

glob_res = glob.glob(config_dir + "*.ovpn")
if len(glob_res) == 0:
print 'No config files found. Maybe wrong dir?'
sys.exit(1)

try:
for config in glob_res:
print "Modifying %s" % (config)
content = []
for line in open(config, "r"):
if "auth-user-pass" == line.strip():
content.append(line.replace("auth-user-pass", "auth-user-pass auth.txt"))
else:
content.append(line)
with open(config, "w") as config_file:
config_file.write("".join(content))
with open(config_dir + "auth.txt", "w") as auth_file:
auth_file.write(username + "\n")
auth_file.write(password + "\n")
print "OK"
except:
print "Error occured. May be insufficient permissions?"
sys.exit(1)


3.6. Ruby-скрипт


#!/usr/bin/env ruby

if ARGV.size!=3
puts "Usage: ./make_auth.rb <configs dir> <username> <password>"
exit(0)
end

config_dir=ARGV[0]
username=ARGV[1]
password=ARGV[2]

Dir.glob("#{config_dir}/*.ovpn").each do |ovpn|
print "Reconfig #{ovpn}...\t"
content=[]
File.open(ovpn, 'r') do |fl|
while !fl.eof
str=fl.gets
str="auth-user-pass auth.txt\n" if str.include?('auth-user-pass')
content << [str]
end
end
File.open(ovpn, 'w') do |fl|
fl.puts content.join("")
end
puts "done"

File.open("#{config_dir}/auth.txt", 'w') do |auth|
auth.puts username
auth.puts password
end
end