Как настроить OpenVPN так, чтобы при закрытии терминала автоматически отключалось соединение?

Как исправить ситуацию, когда отключение OpenVPN не происходит после закрытия терминала, в котором он был запущен через ярлык, от имени другого пользователя, не используя ручное прерывание процесса "kill"?
  • 29 января 2024 г. 15:50
Ответы на вопрос 2
Чтобы настроить OpenVPN для автоматического отключения при закрытии терминала, нужно запустить OpenVPN клиент с определенными параметрами или использовать скрипт, управляющий процессом OpenVPN.

Вот пример скрипта оболочки, который запускает OpenVPN и отслеживает, когда терминал закрывается:

```bash
#!/bin/bash

# Запускаем OpenVPN в фоновом режиме и запоминаем PID
sudo openvpn --config /path/to/your/config.ovpn &
VPN_PID=$!

# Устанавливаем ловушку на сигналы. В случае получения SIGINT или SIGTERM,
# отправляем SIGTERM процессу OpenVPN для его корректного завершения
trap "echo 'Прекращение работы...'; sudo kill -SIGTERM $VPN_PID; exit;" INT TERM

# Ждем, пока процесс OpenVPN не завершится
wait $VPN_PID

# После завершения процесса OpenVPN скрипт продолжит работу.
# Здесь мы делаем какие-либо пост-шаги по очистке, если необходимо.

exit 0
```

Чтобы использовать этот скрипт, сохраните его в файл, например, `run-vpn.sh`, сделайте файл исполняемым:

```bash
chmod +x run-vpn.sh
```

Запускайте скрипт из терминала и при закрытии терминала OpenVPN будет получать сигнал для завершения работы.

Кроме того, чтобы запускать OpenVPN с мониторингом закрытия терминала, можно использовать команду `expect`. Пример скрипта с использованием expect:

```bash
#!/usr/bin/expect

# Запускаем OpenVPN
spawn sudo openvpn --config /path/to/your/config.ovpn

# Делаем так, чтобы expect не завершался и ожидал закрытия терминала
interact {
    eof {
        # Действия, выполняемые при закрытии терминала
        puts "Терминал закрыт. Отключаемся..."
        # Отправляем Ctrl+C в процесс OpenVPN
        send "\003"
        # Ждем завершения OpenVPN
        expect eof
        # Закрываем процесс
        close
        exit
    }
}
```

Сохраните этот код в файл, например, `run-vpn.expect`, установите пакет `expect` если он не установлен:

```bash
sudo apt-get install expect
```

Сделайте файл исполняемым:

```bash
chmod +x run-vpn.expect
```

Теперь, когда вы запустите `./run-vpn.expect`, OpenVPN будет отключаться при закрытии терминала.

Обратите внимание, что использование `sudo` в этих скриптах предполагает, что у вас есть соответствующие привилегии для запуска OpenVPN с правами администратора. Вы можете настроить `sudo`, чтобы запускать OpenVPN без ввода пароля, добавив соответствующую запись в файл `/etc/sudoers` с помощью команды `visudo`. Однако будьте осторожны с изменениями в этом файле, так как ошибки могут привести к проблемам с системными привилегиями.
killall openvpn 
sudo killall openvpn
закрывает все процессы с openvpn в имени

еще вариант есть ввиде команды самого опенвпн
openvpn session-manage --disconnect
но придется привязаться к сессии
Похожие вопросы