OpenVPN 클라이언트가 연결된 후 다음 명령을 실행합니다.

OpenVPN 클라이언트가 연결된 후 다음 명령을 실행합니다.

현재 openvpn을 사용하여 원격 네트워크에 연결한 다음 터미널에 "초기화 시퀀스 완료"가 나타나면 두 번째 창에서 스크립트를 실행합니다. (비밀번호를 입력하지 않고도 이 모든 작업을 수행할 수 있습니다.)

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

xterm 1:

sudo openvpn --config foo.ovpn

xterm 2:

./snaggle.sh

그런데 게으르기 때문에 이 두 명령을 하나로 병합하고 싶은데 방법을 모르겠습니다. 내가 아는 것은 작동하지 않습니다.

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.ovpnopenvpnsnaggle

명령 실행에 사용 가능한 다른 옵션(인증 후, IP가 변경된 경우, 연결이 끊어진 경우 등)에 대해 자세히 알아보려면 다음을 수행하세요.문서.

답변2

! 답장하다 아쿠분투

나는 연구 중에 이 문제에 대한 답을 우연히 발견했고 내가 찾은 최고의 해결책은 (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

여러 제안을 따른 후 내가 직면한 한 가지 문제는 전체 "초기화 시퀀스가 ​​완료"되기 전에 "--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;

관련 정보