Executando um comando depois que meu cliente OpenVPN se conecta

3

Atualmente, conecto-me a uma rede remota usando o openvpn e, quando "Initialization Sequence Completed" aparece no terminal, executo um script em uma segunda janela. (Tudo sem ter que digitar minha senha.)

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

xterm 1:

sudo openvpn --config foo.ovpn

xterm 2:

./snaggle.sh

Sendo preguiçoso, porém, quero combinar os dois em um comando, mas não consigo descobrir como. Uma coisa que eu sei é que não funciona:

sudo nohup openvpn --config foo.ovpn &

EDIT: Ao adicionar estes comandos ao foo.ovpn, notei que eles corriam bem antes de " Sequência de inicialização concluída " aparecer:

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

EDIT 2: aqui está o conteúdo do snaggle.sh. (De importância: às vezes eu preciso me conectar à VPN sem executando este script.)

#!/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)

EDIT 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
    
por RonJohn 14.10.2017 / 01:54

3 respostas

3

Você pode especificar um script para ser executado ao conectar-se à sua VPN através do openvpn com a diretiva up (entre algumas outras que serão executadas em momentos diferentes durante a inicialização). Você pode precisar definir segurança de script também para isso. Basta anexar o seguinte ao seu arquivo foo.ovpn :

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

No seu caso, isso deve ser o mais recente possível antes da sequência de desconexão, já que você precisará de conectividade por meio da VPN:

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

Note que o openvpn não processa nenhum pacote enquanto este comando é executado, então este script precisa ser um script de chamada para o seu snaggle.sh , assim:

#!/bin/bash

nohup /path/to/snaggle.sh &

exit 0

Como você também precisa escolher se executará o script ou não ao se conectar, poderá usar 2 arquivos .ovpn diferentes ou usar o formulário de parâmetro da linha de comando ( openvpn --config xxx.ovpn --script-security 2 --route-up /path/to/script.sh ) em vez de ter essas opções dentro da .ovpn file. Você pode até criar um alias para isso como openvpnsnaggle se a digitação for um problema.

Para saber mais sobre as outras opções disponíveis para executar comandos (após a autenticação, em alterações de IP, na desconexão, etc ...), você pode ler sobre eles na comunidade documentação .

    
por 15.10.2017 / 05:12
1

resposta escrita ao askubuntu

Eu tropecei na resposta da minha pesquisa para resolver esse problema e descobri que a melhor solução é (usando o servidor openvpn):

Crie um script para ser executado:

# 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>

Adicione as seguintes linhas na configuração openvpn (normalmente /etc/openvpn/server.conf). Na resposta acima foi usado para cima e para baixo, que são usados quando o servidor é iniciado (restarats). A diretiva client-connect (e client-disconnect) é usada quando o cliente se conecta (desconecta)

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
    
por 14.09.2018 / 12:15
0

No meu caso, eu não precisava disso, mas, como Mathias Sundman disse em um post, você pode fazer o seguinte (somente Windows): 1. crie um arquivo .bat com todo o seu código - se o seu arquivo de configuração openvpn é chamado office-network.ovpn então, - o arquivo .bat deve ser denominado office-network_up.bat 2. coloque o arquivo .bat na pasta de configuração openvpn (próximo ao arquivo ovpn) 3. Cuidado para não usar a pausa ou outros comandos cmd / shell que aguarde a entrada do usuário, ele vai quebrar a inicialização do openvpn 4. se você precisar de interação com o usuário, use:

start /I "next.bat" 

no office-network_up.bat

Um exemplo de .bat que lista as variáveis de ambiente

@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    
    
por 30.09.2018 / 14:51