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-passOpenVPN 문서( man openvpn)에서 이 패스에 대한 자세한 내용을 확인하세요.

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

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

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의 솔루션이 이 솔루션보다 낫습니다. 대화형 명령을 자동화하는 방법을 알아내려는 누군가에게 도움이 될 수 있도록 남겨두겠습니다.

관련 정보