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のソリューションはこのソリューションよりも優れています。インタラクティブなコマンドを自動化する方法を知りたい人に役立つようにします。

関連情報