Bash 스크립팅 - OpenVPN에서 출력을 여러 입력으로 보내는 방법은 무엇입니까?

Bash 스크립팅 - OpenVPN에서 출력을 여러 입력으로 보내는 방법은 무엇입니까?

그래서 OpenVPN 서버에 연결하는 과정을 쉽게 하기 위해 스크립트를 작성하려고 합니다.

그래서 내가 쓸 때 :

openvpn --config vpnbook-pl226-udp53.ovpn

사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.

Wed Apr  1 21:23:28 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] 
[EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Apr  1 21:23:28 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10
Enter Auth Username:            
Enter Auth Password: 

여기에서는 내 스크립트가 자동으로 OpenVPN에 사용자 이름과 비밀번호를 보내도록 하고 싶습니다.

나는 다음과 같은 시도를 했습니다.

시도 1:

{ echo "vpnbook"; echo "3vze4vd"; } | openvpn --config vpnbook-pl226-udp53.ovpn

시도 2:

echo -e "vpnbook\n3vze4vd" | openvpn --config vpnbook-pl226-udp53.ovpn

시도 3:

(echo $username; echo $password;) | openvpn --config vpnbook-pl226-udp53.ovpn

하지만 그들 중 누구도 작동하지 않습니다. 다음과 같은 결과가 나타납니다.

Wed Apr  1 21:38:14 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Apr  1 21:38:14 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10

그러면 아무 일도 일어나지 않습니다.

누군가 나에게 이것에 대한 힌트를 줄 수 있습니까?

답변1

보안 파일(소유자만 읽을 수 있는 파일)에 사용자 이름과 비밀번호를 추가할 수 있습니다. auth-user-pass자세한 내용은 OpenVPN 설명서에서 패스를 찾아보세요 ( man openvpn).

cat > /path/to/secret <<'X'
myusername
verysecret
X
chmod u=rw,go= /path/to/secret

이제 auth-user-passOpenVPN 구성 파일에서 지시문을 찾아 다음과 같이 확장하세요.

auth-user-pass /path/to/secret

답변2

이건 직업인 것 같아예상하다.

이 데모의 목적을 위해 openvpn 명령의 동작을 가장하는 짧은 스크립트를 작성했습니다.

#! /usr/bin/env bash
echo "Wed Apr  1 21:23:28 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4]"
echo "[EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019"
echo "Wed Apr  1 21:23:28 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10"
read -r -p 'Enter Auth Username: ' USERNAME
read -rs -p 'Enter Auth Password: ' PASSWORD

echo
echo "username was $USERNAME"
echo "password was $PASSWORD"

다음은 이러한 프롬프트에 응답하는 짧은 예상 스크립트입니다.

#! /usr/bin/env expect

spawn ./fakevpn --config vpnbook-pl226-udp53.ovpn

expect "Enter Auth Username: " { send Hello\r } # \r is the "return" character.
expect "Enter Auth Password: " { send World\r } # It simulates hitting the Enter key.
expect eof # This ensures expect won't exit until there's no more output.

출력은 다음과 같습니다.

[gnubeard@mothership: ~/vpn]$ ./vpn_expect
spawn ./fakevpn --config vpnbook-pl226-udp53.ovpn
Wed Apr  1 21:23:28 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4]
[EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Apr  1 21:23:28 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10
Enter Auth Username: Hello
Enter Auth Password:
username was Hello
password was World

편집: roiama의 솔루션은 보안상의 이유로 이 솔루션보다 우수합니다. 대화형 명령을 자동화하는 방법을 알아내려는 누군가에게 도움이 될 수 있도록 이 내용을 남겨두겠습니다.

관련 정보