web-dev-qa-db-ja.com

OpenVPNクライアントが接続した後にコマンドを実行する

現在、openvpnを使用してリモートネットワークに接続し、ターミナルに「初期化シーケンスが完了しました」と表示されたら、2番目のウィンドウでスクリプトを実行します。 (すべて、パスワードを入力する必要はありません。)

$ cat /etc/sudoers.d/openvpn 
ron ALL = NOPASSWD: /usr/sbin/openvpn

xterm 1:

Sudo openvpn --config foo.ovpn

xterm 2:

./snaggle.sh

しかし、怠惰なので、2つを1つのコマンドに結合したいのですが、方法がわかりません。私が知っているこの1つはそれが機能しないことです:

Sudo Nohup openvpn --config foo.ovpn &

編集:これらのコマンドをfoo.ovpnに追加すると、うまく実行されたことがわかりましたbefore "Initialization Sequence Completed"が表示されました:

user ron
group ron
script-security 2
up /home/ron/snaggle.sh

編集2:snaggle.shの内容は次のとおりです。 (重要:VPNに接続する必要がある場合がありますなしこのスクリプトを実行しています。)

#!/bin/bash

echo $HOME
cd $HOME/work

readonly TS=`TZ=UTC date +"%Y%m%d_%H%M"`
readonly TSHUMAN=`TZ=UTC date +"%F %H:%M %Z"`
readonly OUTFILE=results/prod_cluster_${TS}UTC.txt

for ip in 16 17 18;
do
    node=10.0.83.${ip}
    echo $node
    echo -e "\n\n ${node} \n" >> ${OUTFILE}
    ssh A467197@${node} "bash -s" <<EOF >> ${OUTFILE}
#/bin/bash
mysql -N -e "select 'Uptime is ', mysql.big_time_format(VARIABLE_VALUE) as Uptime from performance_schema.global_status where VARIABLE_NAME='Uptime';"
mysql -N -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster%';"
EOF
done

echo "" | mutt -s "Some private stuff at ${TSHUMAN}" -a ${OUTFILE} -- $(cat email_addrs.txt)

編集3:

OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 22 2017
library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <[email protected]>
Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_maintainer_mode=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=yes enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_mem_check=no with_plugindir='${prefix}/lib/openvpn' with_sysroot=no
4
RonJohn

upディレクティブを使用して、openvpn経由でvpnに接続するときに実行するスクリプトを指定できます(初期化中に別の時間に実行される他のいくつかのスクリプトの中でも特に)。そのために、スクリプトのセキュリティも設定する必要がある場合があります。以下をfoo.ovpnファイルに追加するだけです:

script-security 2
up /path/to/script.sh

あなたの場合、VPN経由の接続が必要になるため、切断シーケンスの前にこれが可能な限り最新のはずです。

script-security 2
route-up /path/to/script.sh

このコマンドを実行すると、openvpnはパケットを処理しないため、このスクリプトは次のようにsnaggle.shの呼び出し元スクリプトである必要があります。

#!/bin/bash

Nohup /path/to/snaggle.sh &

exit 0

接続時にスクリプトを実行するかどうかも選択する必要があるため、.ovpnファイル内にこれらのオプションを指定する代わりに、2つの異なるopenvpn --config xxx.ovpn --script-security 2 --route-up /path/to/script.shファイルを使用するか、コマンドラインパラメーター形式(.ovpn)を使用できます。入力に問題がある場合は、openvpnsnaggleのようなエイリアスを作成することもできます。

コマンドを実行するための他の利用可能なオプションの詳細を確認するには(認証後、IPの変更時、切断時など...)、それらについて ドキュメント で読むことができます。

4
Zip

! askubuntuに書かれた回答

私はこの問題を解決するために私の研究で答えに出くわしました、そして私は最良の解決策が(openvpnサーバーを使用して)であることがわかりました:

実行するスクリプトを作成します。

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

次の行をopenvpn構成(通常は/etc/openvpn/server.conf)に追加します。上記の答えでは、サーバーが起動したときに使用される上下に使用されました(再起動)。ディレクティブclient-connect(およびclient-disconnect)は、クライアントが接続(切断)するときに使用されます

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
1
CozC

私の場合、私はそれを必要としませんでしたが、Mathias Sundmanが投稿で言ったように、あなたは次のことをすることができます(Windowsのみ):1.すべてのコードで.batファイルを作成します次に、network.ovpn-.batファイルの名前はoffice-network_up.batにする必要があります2. .batファイルをopenvpn configフォルダー(ovpnファイルの近く)に置きます。ユーザー入力を使用すると、openvpn 4の初期化が中断されます。

start /I "next.bat" 

office-network_up.bat

環境変数をリストする.batの例

@echo off
date /t > %TEMP%\openvpn.log
for %%i in (%0 %1 %2 %3 %4 %5 %6 %7 %8 %9) do echo Argument %%i >> %TEMP%\openvpn.log
set >> %TEMP%\openvpn.log
start /I type %TEMP%\openvpn.log    
1
CozC