AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 868088
Accepted
null
null
Asked: 2017-01-05 12:14:48 +0800 CST2017-01-05 12:14:48 +0800 CST 2017-01-05 12:14:48 +0800 CST

如何在脚本中以 root 身份在后台运行 OpenVPN?

  • 772

我想写一个脚本,openvpn首先调用,然后是ssh. 输入命令时

sudo openvpn ~/my_connection.ovpn

在命令提示符下,我得到以下输出:

...
Wed Jan  4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jan  4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500
Wed Jan  4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO
Wed Jan  4 21:04:35 2017 Initialization Sequence Completed

该命令是阻塞的,shell 没有被释放。为了之后启动 ssh 连接,我需要通过键入Ctrl+Z后跟bg.

但是,我想通过仅调用我的 bash 文件来自动调用 openvpn 连接步骤和 ssh。我如何设法模拟此文件中的Ctrl+Z和bg步骤?

我试图将 a 附加&到openvpn命令并放在nohup它前面。两者都不起作用。

command-line
  • 3 3 个回答
  • 101736 Views

3 个回答

  • Voted
  1. Best Answer
    Eliah Kagan
    2017-01-05T14:30:53+08:002017-01-05T14:30:53+08:00

    TL;DR:使用sudo -b或者,更好,.openvpn [...] --daemon

    由于您正在运行openvpn(并且不太具体,因为您希望在后台以 root身份运行程序),所以最常见的关于如何在后台运行命令的信息并不能解决您的情况。你说:

    我尝试将 & 附加到 cpenvpn 命令并将 nohop 放在它前面。两者都不起作用。

    你的命令是:

    sudo openvpn ~/my_connection.ovpn
    

    在sudo的默认配置下,如果您最近没有sudo在同一个终端中输入密码(或在该终端上注销并重新登录),那么它将询问您的密码。但是,如果您通过附加在后台运行命令,&那么您将不会看到该行或有机会输入它。[sudo] password for user:

    因此在这种情况下,运行命令,输入密码,然后将其发送到后台是一种合理的方式,用于交互使用。

    但这不是唯一的方法,正如您所说,您不想在脚本中这样做。

    方式1:确保sudo有一个新的时间戳。

    您可以通过首先运行以下命令来确保sudo它在用于运行命令时具有当前时间戳:

    sudo -v
    

    然后,在那之后,您可以运行:

    sudo openvpn ~/my_connection.ovpn &
    

    但是,当您想在后台运行命令时,通常最好完全避免&(和) 。脚本尤其如此。nohupsudo

    方式 2:使用sudo -b. 通常,这通常是您想要的。

    相反,您可以sudo在前台运行它自己,但传递-b标志以sudo使命令在后台运行。

    sudo -b openvpn ~/my_connection.ovpn
    

    这通常是一种更好的方法,尤其是当您将命令放入脚本时。sudo -b你没有得到作业控制,但在 shell 脚本中作业控制默认是禁用的,你通常不应该使用它。

    正如man sudo解释的那样:

         -b, --background
                     Run the given command in the background.  Note that it is not
                     possible to use shell job control to manipulate background
                     processes started by sudo.  Most interactive commands will
                     fail to work properly in background mode.

    这是有效的,因为在sudo 收到您的密码(如有必要)并确定您被允许运行该命令之前,没有任何东西在后台运行。

    方式 3:但是对于openvpn,您可能应该只使用--daemon.

    openvpn--daemon如果您使用以下选项运行它,它将自动在后台运行:

    sudo openvpn ~/my_connection.ovpn --daemon
    

    --daemon在您的.opvn文件名之后而不是之前传递;后面的参数--daemon(如果有)被解释为守护openvpn进程应该使用的名称。(不要同时附加&。)

    这是否合适取决于在openvpn运行之后但在其守护进程之前是否必须发生任何交互。这部分取决于~/my_connection.ovpn. 但是,如果openvpn不能立即守护进程,那么所有其他立即在后台运行它的方式也会中断。

    因此,在您知道要开始在后台运行并且您知道不想将其带回前台的任何情况下openvpn,您都应该强烈考虑使用--daemon选项调用它的方法。这是特定于openvpn--most 程序不支持--daemon选项的,尽管许多服务器程序确实有一些这样的选项。(但是,名称和语法有所不同。)

    要决定是否使用此选项(以及您希望如何使用它),我建议您阅读手册页,尤其是关于openvpn--daemon. 它有很多有用的信息,我在这里只引用第一段:

           --daemon [progname]
                  Become  a  daemon  after  all   initialization   functions   are
                  completed.   This option will cause all message and error output
                  to be sent to  the  syslog  file  (such  as  /var/log/messages),
                  except  for  the  output of scripts and ifconfig commands, which
                  will go to /dev/null unless otherwise  redirected.   The  syslog
                  redirection  occurs  immediately  at  the point that --daemon is
                  parsed on the command line even though the  daemonization  point
                  occurs  later.   If one of the --log options is present, it will
                  supercede syslog redirection.
    
                  The optional progname parameter [...]

    方式 4:有时以 root 身份运行整个脚本是合理的。

    如果您有一个以 root 身份执行多个操作的脚本,那么它没有任何可以合理地不以 root 身份运行的重要活动,并且以非 root 用户身份运行脚本永远不会有任何用处,那么该脚本的用户可能应该以 root 身份运行它。

    如果是这种情况,那么您应该sudo从脚本中的命令中删除。当脚本以 root 身份运行时,不需要sudo. (尽管默认情况下,root 用户可以像任何用户一样运行任何命令,包括它自己,sudo并且不需要密码来执行此操作。因此,如果您确实将实例保留sudo在脚本中,那么它可能仍然可以工作。)

    如果您sudo在脚本中有任何实例实际上用于以除 root 以外的其他用户身份运行命令(使用),那么您仍应保留这些实例。-u user

    如果整个脚本以 root 身份运行,则大多数使命令在后台运行的典型方法都适用,包括附加&以及在需要时使用nohup(您已经知道)。但是,为此,您仍应强烈考虑使用openvpnwith--daemon选项。

    • 64
  2. RajaRaviVarma
    2017-08-19T13:24:43+08:002017-08-19T13:24:43+08:00

    TL;DR在守护进程模式下运行它:openvpn --config Windscribe-Japan.ovpn --daemon

    openvpn仅当未指定其他选项时,将配置 (.ovpn) 文件名传递给命令才有效。如果我指定--daemon选项,则 openvpn 尝试将文件名解析为选项参数并引发选项错误:我正在尝试将 "Windscribe.ovpn" 解析为 --option 参数,但我没有看到前导 '--'。

    回答:

    为避免这种情况,必须使用--config选项指定文件名。例如,openvpn --config Windscribe.ovpn --daemon。然后在 syslog 尾部加上tail -f /var/log/syslog, 以进行进一步检查。

    您还可以检查此 curl 命令的输出前后,curl ifconfig.co以确保 VPN 已连接。

    注意:即使在您从 SSH 会话中注销后,这也会保持守护程序运行。

    • 11
  3. user18099
    2018-09-22T05:16:43+08:002018-09-22T05:16:43+08:00

    你可以复制你的

    .conf 文件到 /etc/openvpn/

    然后让“service openvpn@confName start”为你处理所有的守护进程和 sudo。

    见https://unix.stackexchange.com/a/366680/198666

    • 4

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve