登录时自动运行需要 root 权限的 BASH 脚本

登录时自动运行需要 root 权限的 BASH 脚本

运行 Debian 11 (Bullseye),我有一个简短的 BASH 脚本,我希望在登录我的家用 PC 时自动运行该脚本。它的目的是只要我的手机已连接并作为网络接口处于活动状态,就启动 openvpn 作为守护进程运行...

#!/bin/bash

until [[ -e "/sys/class/net/tun0" ]]; do
        if ethtool usb0 | grep -q "Link detected: yes"; then
        openvpn --log <myfile.log> --daemon --config <myfile.conf>; else
        sleep 15
        fi
done

我想在登录时自动运行它,但我不确定如何最好地执行它。openvpn需要root权限。从互联网上搜索,两种最有可能的方法是将脚本的路径放入内部/etc/rc.local,根据我对运行级别的粗略了解,这将导致脚本在初始化多用户运行级别时以 root 身份执行。否则我想我可以编辑 sudoers 文件以允许我的用户无需密码即可运行openvpn,然后将其添加到我的 DE 启动程序列表中?或者将其包含在我的bash.rc?

我非常感谢对剧本的任何指导或批评!

编辑:正如 @Gilles'SO-stopbeingevil' 指出的那样,让脚本在登录时连续运行并不是最佳选择。更有针对性的方法是在网络接口启动后立即运行脚本。 由于我使用的是 ifup,并且根据 ifup 手册页,我直接在 usb0 接口配置定义之后添加了一行,以“post-up”开头,后面是在接口引入后立即执行的命令的参数向上。像这样...

`This file describes the network interfaces available on your system
and how to activate them. For more information, see interfaces(5).

allow-hotplug usb0
iface usb0 inet dhcp
post-up bash /home/user/sh/vpnlauncher.sh`

使用此方法时,上面的脚本可能会执行太多不必要的验证,但我将其保留原样。

编辑 2:不幸的是,虽然上面的解决方案昨天似乎工作得很好,但今天早上它导致我的系统创建了数千个 openvpn 进程,并且 cpu 使用率飙升;由于机器没有响应,我不得不硬重置机器。我不知道为什么会这样,但我建议任何阅读本文的人不要使用它

相关内容