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

Авторизоваться при подключении к VPN, не вводя логин и пароль, возможно слегка изменив конфигурационный файл выбранной цепи.

Ручная настройка

Типичный файл конфигурации VPN-подключения DeepWebVPN имеет вид:
...
proto tcp-client
tls-client
comp-lzo yes
verb 3
sndbuf 0
rcvbuf 0
nobind
pull
cipher AES-256-CBC
auth SHA512
auth-user-pass
persist-key
persist-tun
...
На 4-ой с конца строке примера выше расположена опция авторизации auth-user-pass. Если ее заменить на auth-user-pass auth.txt, то VPN-клиент будет запрашивать пару логин и пароль в файле auth.txt, расположенному в директории измененного файла конфигурации. При этом файл auth.txt должен содержать только 2 строки: логин, записанный на первой строке, и пароль, записанный на второй строке:
username
password
Не обязательно изменять все файлы конфигурации (*.ovpn), достаточно скорректировать только те, которые часто используются.

Скрипты автоматической настройки

Ниже представлены скрипты для автоматического изменения конфигов (*.ovpn) на авторизацию через файл.

Ruby

Для запуска скрипта необходимо иметь установленный интерпретатор 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
Использование
  1. Запишите исходный код скрипта в файл make_auth.rb.
  2. Запустите скрипт make_auth.rb с параметрами: директория, где расположены конфигурационные файлы (*.ovpn); ваш логин; ваш пароль:
    ruby make_auth.rb configs_dir username password
  3. По завершению работы скрипта все файлы конфигурации в указанной директории будут настроены на авторизацию через файл auth.txt, который будет создан скриптом в той же указанной директории.

Bash-скрипт

Для запуска скрипта необходимо иметь интерпретатор Bash (Linux).
#!/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
Использование
  1. Запишите исходный код скрипта в файл make_auth.sh с правами на выполнение.
  2. Запустите скрипт make_auth.sh с параметрами: директория, где расположены конфигурационные файлы (*.ovpn); ваш логин; ваш пароль:
    ./make_auth.sh configs_dir username password
  3. По завершению работы скрипта все файлы конфигурации в указанной директории будут настроены на авторизацию через файл auth.txt, который будет создан скриптом в той же указанной директории.

PHP

Для запуска скрипта необходимо иметь установленный интерпретатор 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";
  }
?>
Использование
  1. Запишите исходный код скрипта в файл make_auth.php.
  2. Запустите скрипт make_auth.php с параметрами: директория, где расположены конфигурационные файлы (*.ovpn); ваш логин; ваш пароль:
    php make_auth.php configs_dir username password
  3. По завершению работы скрипта все файлы конфигурации в указанной директории будут настроены на авторизацию через файл auth.txt, который будет создан скриптом в той же указанной директории.

Python

Для запуска скрипта необходимо иметь установленный интерпретатор 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)
Использование
  1. Запишите исходный код скрипта в файл make_auth.py.
  2. Запустите скрипт make_auth.py с параметрами: директория, где расположены конфигурационные файлы (*.ovpn); ваш логин; ваш пароль:
    python make_auth.py configs_dir username password
  3. По завершению работы скрипта все файлы конфигурации в указанной директории будут настроены на авторизацию через файл auth.txt, который будет создан скриптом в той же указанной директории.

Batch (Bat-файл)

Совместимость скрипта проверялась только с Windows 7.
@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
Использование
  1. Запишите исходный код скрипта в файл make_auth.bat.
  2. Запустите скрипт make_auth.bat.
  3. В открывшимся окне командной строки Windows введите путь до папки с файлами конфигурации (*.ovpn), ваш логин, ваш пароль.
  4. Дождитесь завершения работы скрипта, далее нажмите любую клавишу - окно командной строки должно закрыться. К этому моменту все файлы конфигурации в указанной папке будут настроены на авторизацию через файл auth.txt, который будет создан скриптом в той же указанной директории.

Perl

Для запуска скрипта необходимо иметь установленный интерпретатор 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";
Использование
  1. Запишите исходный код скрипта в файл make_auth.pl.
  2. Запустите скрипт make_auth.pl с параметрами: директория, где расположены конфигурационные файлы (*.ovpn); ваш логин; ваш пароль:
    ./make_auth.pl configs_dir username password
  3. По завершению работы скрипта все файлы конфигурации в указанной директории будут настроены на авторизацию через файл auth.txt, который будет создан скриптом в той же указанной директории.