
現在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つにマージしたいのですが、方法がわかりません。私が知っているのはうまくいきません。
sudo nohup openvpn --config foo.ovpn &
編集:foo.ovpnにこのコマンドを追加したときに正しく機能することを確認しました。今後」初期化シーケンス完了「現れる:
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
答え1
このディレクティブを使用して、openvpnを介してVPNに接続するときに実行するスクリプトup
(初期化プロセス中にさまざまな時間に実行される他のスクリプトも含む)を指定できます。これを行うには、スクリプトセキュリティを設定する必要があります。ファイルに以下を追加するだけですfoo.ovpn
。
script-security 2
up /path/to/script.sh
あなたの場合はVPN経由で接続する必要があるため、切断前の最後の時間である必要があります。
script-security 2
route-up /path/to/script.sh
snaggle.sh
このコマンドが実行されると、openvpnはパケットを処理しないため、このスクリプトは次のように呼び出し側スクリプトにする必要があります。
#!/bin/bash
nohup /path/to/snaggle.sh &
exit 0
接続時にスクリプトを実行するかどうかを選択する必要があるため、これらのオプションをファイルに含めるのではなく、2つの異なる.ovpn
ファイルを使用するか、コマンドライン引数形式()を使用できます。入力が問題の場合は、エイリアスを作成することもできます。openvpn --config xxx.ovpn --script-security 2 --route-up /path/to/script.sh
.ovpn
openvpnsnaggle
コマンドの実行に使用可能な他のオプション(認証後、IPが変更された場合、接続が失われた場合など)の詳細については、次の手順を実行してください。文書。
答え2
!返信 Akubuntu
私は研究中にこの問題に対する答えを偶然発見し、私が見つけた最高の解決策は(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>
答え3
私の場合は必要ありませんが、Mathias Sundmanが記事で述べたように、次のことができます(Windowsのみ)。 1. すべてのコードを含む .bat ファイルを作成します。 – openvpn 構成の場合、ファイル名は次のとおりです。 office-network.ovpnその後、.batファイルの名前はoffice-network_up.batでなければなりません。 2. .batファイルをopenvpn configフォルダ(ovpnファイルの横)に配置します。 3.一時停止やその他の待機中のcmdを使用しないように注意してください。 / shellコマンドユーザー入力を実行すると、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
答え4
いくつかの提案に続いて私が直面した問題の1つは、「初期化シーケンス全体が完了する」前に「--up」と--route-upが実行されたことです。
私の場合は、完全初期化後にポートを開く必要があります。
#1)up.shを作成し、ポートオープンスクリプト(proxyports.sh)を非同期的に起動します。
#2)down.shを作成し、Proxyports.shで非同期に開いたポートを閉じます。
up.shの内容...
#!/bin/bash
( ( sleep 1 ; ~/proxyports.sh) & echo "Open the ports" )
Proxyports.shの内容...
#!/bin/bash
HOME=/home/venkatdesu
PID=$(/usr/sbin/lsof -i :1080 | grep LISTEN|awk '{print $2}'|sort|uniq);
if [[ ! -z "$PID" ]]; then
echo "SSH Socks Process $PID running with " $(ps "$PID");
kill -9 $PID;
sleep 1;
fi;
ssh -D 1080 -Nf [email protected]
PID=$(/usr/sbin/lsof -i :1080 | grep LISTEN|awk '{print $2}'|sort|uniq);
echo "Socks running at $PID"
down.shコンテンツ...
#!/bin/bash
PID=$(/usr/sbin/lsof -i :1080 | grep LISTEN|awk '{print $2}'|sort|uniq);
if [[ ! -z "$PID" ]]; then
echo "SSH Socks Process $PID running with " $(ps "$PID");
kill -9 $PID;
fi;