openVPN putuskan via baris perintah di linux

11

Apakah ada cara untuk memutuskan koneksi openvpn yang dibuat oleh jari-jari bebas dengan baris perintah shell?

Saya memiliki semua informasi tentang koneksi openvpn:

  • Nama pengguna
  • IP klien
  • AccountSeassionID
  • ...
hamedsh
sumber
TL; DR: sudo pkill openvpn
Andrew

Jawaban:

9

pkill -SIGTERM -f 'openvpn --daemon --conf $ OPENVPNCONFFILE'

perintah pkill memungkinkan Anda memberi sinyal proses berdasarkan nama atau atribut lainnya

Ini akan mengirim SIGTERM ke openvpn yang menyebabkannya berhenti dan menutup antarmuka tun dengan anggun. Anda mungkin / perlu memodifikasi bagian setelah -f untuk mencocokkan dengan cara Anda memulai koneksi openvpn.

Saya menemukan ini di bagian Sinyal di halaman manual openvpn.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.
gymnodemi
sumber
wow, sangat berguna dan elegan
georgiecasey
OOF! ^ Saya harap itu sarkasme
Andrew
4

Tentukan antarmuka virtual dengan ifconfig:

tap0      Link encap:Ethernet  HWaddr 32:28:a4:04:34:cc  
          inet addr:172.22.18.14  Bcast:172.22.18.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

dan matikan dengan:

sudo ifconfig tap0 down

Ini skrip init yang saya tulis untuk RedHat:

#! /bin/bash
#
# openvpn-client    Start/Stop the openvpn client
#
# chkconfig: 2345 90 60
# description: start openvpn client at boot
# processname: openvpn

# Source function library.
. /etc/init.d/functions

daemon="openvpn"
prog="openvpn-client"
conf_file="/vagrant/vpn/client-dept18-payment.ovpn"

start() {
    echo -n $"Starting $prog: " 
        if [ -e /var/lock/subsys/openvpn-client ] && [ $(pgrep -fl "openvpn --config /vagrant/vpn/client-dept18-payment.ovpn" | wc -l) -gt 0 ]; then
        echo_failure
        echo
        exit 1
    fi
    runuser -l root -c "$daemon --config $conf_file >/dev/null 2>&1 &" && echo_success || echo_failure
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/openvpn-client;
    return $RETVAL
}

stop() {
    echo -n $"Stopping $prog: "
    pid=$(ps -ef | grep "[o]penvpn --config $conf_file" | awk '{ print $2 }')
    kill $pid > /dev/null 2>&1 && echo_success || echo_failure
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/openvpn-client;
    return $RETVAL
}   

status() {
    pgrep -fl "openvpn --config /vagrant/vpn/client-dept18-payment.ovpn" >/dev/null 2>&1
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        pid=$(ps -ef | grep "[o]penvpn --config $conf_file" | awk '{ print $2 }')
        echo $"$prog (pid $pid) is running..."
    else
        echo $"$prog is stopped"
    fi
}   

restart() {
    stop
    start
}   

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    condrestart)
        [ -f /var/lock/subsys/openvpn-client ] && restart || :
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart}"
        exit 1
esac

maka Anda dapat menggunakannya seperti biasa:

# /etc/init.d/openvpn-client start
Starting openvpn-client:                                   [  OK  ]
# /etc/init.d/openvpn-client start
Starting openvpn-client:                                   [FAILED]
# /etc/init.d/openvpn-client status
openvpn-client (pid 5369) is running...

# /etc/init.d/openvpn-client stop
Stopping openvpn-client:                                   [  OK  ]
# /etc/init.d/openvpn-client stop
Stopping openvpn-client:                                   [FAILED]
# /etc/init.d/openvpn-client status
openvpn-client is stopped

# /etc/init.d/openvpn-client restart
Stopping openvpn-client:                                   [  OK  ]
Starting openvpn-client:                                   [  OK  ]
# /etc/init.d/openvpn-client status
openvpn-client (pid 5549) is running...
kuanta
sumber
1
Ini menghapusnya OK, tetapi tidak mematikan proses openvpn. Jika saya ingin mengembalikan koneksi, saya harus mengembalikan antarmuka, dan kemudian saya harus mematikan proses openvpn, dan kemudian saya harus menjalankan openvpn --config <blah> lagi. Saya (dan saya pikir OP) bertanya-tanya apakah ini yang dimaksudkannya, atau apakah ada cara yang lebih rapi yang tidak kami sadari.
JKim
@ jkim: menambahkan skrip init untuk RedHat berdasarkan jawaban saya.
quanta
BAGUS! 123456789101112
dmourati
Ya ini "berhasil" tetapi tidak membunuh OpenVPN.
Andrew
1

Cukup menjalankan sudo pkill openvpnbekerja dengan baik untuk saya. (Linux Mint 19.1)

Andrew
sumber
0

Saya tidak pernah menggunakan jari-jari bebas, tetapi saya terbiasa dengan masalah serupa di OpenVPN. Jika koneksi dimulai dari baris perintah, maka klien VPN tetap hidup pada prompt atau mundur ke latar belakang, tetapi tidak ada perintah untuk secara eksplisit menghentikan koneksi.
Di Linux, satu-satunya cara untuk menghentikan koneksi adalah dengan perintah "kill" atau "killall". Bisa serupa untuk koneksi radius gratis.

wolfgangsz
sumber
0

Hanya berpikir saya akan memperbarui komentar saya dengan jawaban yang lebih lengkap (yang mungkin tidak relevan, mengingat saya tidak tahu tentang radius-bebas) ..

Saya telah menggunakan distro Linux Debian dan menginstal paket openvpn. Konfigurasi klien di Debian dapat diluncurkan melalui baris perintah, yang mengarah ke masalah ini karena tampaknya tidak ada cara yang rapi untuk mengakhiri / mengelola koneksi ...

Saya belajar hari ini bahwa ada skrip /etc/init.d/openvpn yang berjalan pada saat boot dan jika saya menempatkan file config openvpn di /etc/contvpn/ (ekstensi file harus .conf), saya dapat mengontrol koneksi dengan menggunakan /etc/init.d/openvpn stop, dan etc / init.d / openvpn start (atau "service openvpn stop").

Menempatkan file config di / etc / openvpn / juga menyebabkan tunnel VPN muncul secara otomatis saat boot. Ini juga menghubungkan kembali setelah terputus secara otomatis juga.

JKim
sumber