如何使用 systemd 启动 2FA 使用 OpenVPN?

use*_*436 2 ubuntu systemd openvpn

我有用户 2 因素身份验证的 openvpn 配置。

如果我手动启动它,运行:

/usr/sbin/openvpn --writepid /run/whatever --cd /etc/openvpn/ --config /etc/openvpn/work.conf 
Run Code Online (Sandbox Code Playgroud)

它要求输入用户名,然后是密码(由我手机上的软件提供),然后是私钥的密码。然后它起作用了。

但是,如果/当我尝试通过普通服务调用启动它时:

=# service openvpn start work
Run Code Online (Sandbox Code Playgroud)

没有打印任何内容,openvpn 不起作用,并且 journalctl 显示:

=# systemctl status openvpn
? openvpn.service - OpenVPN service
   Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
   Active: active (exited) since czw 2015-05-28 10:24:22 CEST; 17min ago
  Process: 30395 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 30395 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/openvpn.service

maj 28 10:24:22 krowka systemd[1]: Starting OpenVPN service...
maj 28 10:41:40 krowka systemd[1]: Started OpenVPN service.
Run Code Online (Sandbox Code Playgroud)

除了手动构建 /usr/sbin/openvpn 调用之外,我还能通过“服务”调用或任何其他方式使其“正常”工作吗?

Jde*_*eBP 9

我尝试通过正常的服务调用启动它:
# service openvpn 开始工作

不,这不正常。这是 System 5rc工具集的一个怪癖,它rc使用两个参数调用 System 5脚本。该rc脚本将非标准的第二个参数作为要使用的 OpenVPN 配置的基本名称。

这是 Ubuntu Linux。您没有使用 System 5 rc。你没有使用它的rc脚本。您正在使用 systemd。您正在使用 systemd 服务单元,OpenVPN 实际上已经使用了多年。systemd服务单位不是脚本,不具有脚本参数。

它们拥有的是模板参数,而 OpenVPN 实际上是模板单元机制出现时的较早采用者之一,至少从 2011 年起就有模板化单元。(至少自 2012 年以来,OpenVPN 的模板化新贵工作就一直在流传。)

你在看/lib/systemd/system/openvpn.service。您应该关注的是/lib/systemd/system/openvpn@.service. 在配置名称上实例化:

  • systemctl preset openvpn@work.service
  • systemctl disable openvpn@work.service
  • systemctl start openvpn@work.service
  • systemctl stop openvpn@work.service
  • systemctl status openvpn@work.service

或者让 Debian/Ubuntu 来完成繁重的工作。有一个单元生成器/lib/systemd/system-generators/openvpn-generator可以在引导时或运行时针对每个*.conf文件自动实例化此模板。/etc/openvpnsystemctl daemon-reload

进一步阅读

  • 感谢您的解释(尽管我不太欣赏这种语气)。使用起来太复杂。写了一个简单的shell脚本,它也能正常工作。必须生成“配置文件的配置文件”简直是疯了。 (3认同)