Ron*_*ohn 4 linux scripting openvpn
目前,我使用 openvpn 连接到远程网络,然后当终端中出现“初始化序列完成”时,我在第二个窗口中运行脚本。(所有这些都无需输入我的密码。)
$ cat /etc/sudoers.d/openvpn
ron ALL = NOPASSWD: /usr/sbin/openvpn
Run Code Online (Sandbox Code Playgroud)
xterm 1:
sudo openvpn --config foo.ovpn
Run Code Online (Sandbox Code Playgroud)
xterm 2:
./snaggle.sh
Run Code Online (Sandbox Code Playgroud)
虽然很懒,但我想将两者合并为一个命令,但不知道如何。我所知道的一个是行不通的:
sudo nohup openvpn --config foo.ovpn &
Run Code Online (Sandbox Code Playgroud)
编辑:将这些命令添加到 foo.ovpn 时,我注意到它们在“初始化序列完成”出现之前运行良好:
user ron
group ron
script-security 2
up /home/ron/snaggle.sh
Run Code Online (Sandbox Code Playgroud)
编辑 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)
Run Code Online (Sandbox Code Playgroud)
编辑 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. <sales@openvpn.net>
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
Run Code Online (Sandbox Code Playgroud)
您可以使用up指令指定要在通过 openvpn 连接到 vpn 时运行的脚本(在初始化期间将在不同时间运行的其他一些脚本)。您可能还需要为此设置脚本安全性。只需将以下内容附加到您的foo.ovpn文件中:
script-security 2
up /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这应该是断开连接之前的最新可能,因为您需要通过 VPN 连接:
script-security 2
route-up /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
请注意,在此命令运行时,openvpn 不会处理任何数据包,因此此脚本需要是您的调用者脚本snaggle.sh,如下所示:
#!/bin/bash
nohup /path/to/snaggle.sh &
exit 0
Run Code Online (Sandbox Code Playgroud)
由于您还需要选择是否在连接时运行脚本,您可以使用 2 个不同的.ovpn文件或使用命令行参数形式 ( openvpn --config xxx.ovpn --script-security 2 --route-up /path/to/script.sh) 而不是在.ovpn文件中包含这些选项。你甚至可以为它创建一个别名,就像openvpnsnaggle打字有问题一样。
要了解有关运行命令的其他可用选项(身份验证后、IP 更改、断开连接等)的更多信息,您可以在文档中阅读它们。