Назад | Перейти на главную страницу

OpenVPN: ОШИБКА: не удалось прочитать имя пользователя Auth из стандартного ввода

Мне удалось настроить openvpn, но теперь я хочу интегрировать метод аутентификации пользователя / прохода, поэтому, хотя я не добавил auth-nocache в конфигурации сервера всякий раз, когда я пытаюсь подключиться, он возвращается со следующим сообщением на стороне клиента:

ERROR: could not read Auth username from stdin

Мой файл server.conf содержит базовые вещи, все работает, пока я не попытаюсь реализовать это для аутентификации.

mode server
dev tun
proto tcp
port 1194

keepalive 10 120

plugin /usr/lib/openvpn/openvpn-auth-pam.so login

client-cert-not-required
username-as-common-name

auth-user-pass-verify /etc/openvpn/auth.pl via-env

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

user nobody
group nogroup
server 10.8.0.0 255.255.255.0

persist-key
persist-tun
#persist-local-ip

status openvpn-status.log
verb 3
client-to-client

push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"
log-append /var/log/openvpn
comp-lzo

Я искал решение по всей сети, и все ответы, похоже, связаны с параметром auth-nocache, который я не установил.

Директива auth-user-pass-verify /etc/openvpn/auth.pl via-env указывает на сценарий, который выполняется для аутентификации. Ложная аутентификация должна приводить к выходу 1, а истинная - к выходу 0. Для тестирования этот скрипт auth.pl возвращает выход 0 независимо от того, что вводится, но кажется, что файл не выполняется до возникновения ошибки.

auth.pl содержимое файла:

#!/usr/bin/perl


my $user = $ENV{username};
my $passwd = $ENV{password};

printf("$user : $passwd\n");
exit 0;

Любые идеи?

Вы пробовали предоставить script-security 3 возможность разрешить openvpn запускать внешние программы?

Хотя лучшим решением для запроса пароля, вероятно, было бы настроить OpenVPN для прослушивания порта управления и удержания. Вы можете написать сценарий / интерфейс, который будет собирать учетные данные от пользователя, а затем вы можете установить соединение с сокетом и предоставить учетные данные и освободить удержание.