![Bash 스크립팅 - OpenVPN에서 출력을 여러 입력으로 보내는 방법은 무엇입니까?](https://rvso.com/image/170270/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85%20-%20OpenVPN%EC%97%90%EC%84%9C%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%97%AC%EB%9F%AC%20%EC%9E%85%EB%A0%A5%EC%9C%BC%EB%A1%9C%20%EB%B3%B4%EB%82%B4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
그래서 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-pass
OpenVPN 구성 파일에서 지시문을 찾아 다음과 같이 확장하세요.
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의 솔루션은 보안상의 이유로 이 솔루션보다 우수합니다. 대화형 명령을 자동화하는 방법을 알아내려는 누군가에게 도움이 될 수 있도록 이 내용을 남겨두겠습니다.