如何执行需要root特权的bash脚本?


15

我的ISP提供了以下脚本行:

sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

如果我逐行将其粘贴到终端中,则可以使用。我想创建一个* .command文件并通过双击运行它。但是我得到的只是密码提示,然后是空的bash窗口。生成的“选项”文件为空。

我尝试了这个:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

我得到:

/ etc / ppp / options:权限被拒绝

我想我需要使用一些命令从bash内部获取root特权。


创建脚本时,是否通过键入sudo ./ispscript.command来执行它?另外,bash脚本通常具有.sh后缀:ipscript.sh。
亚伦湖

1
仅供参考。该脚本只需要运行一次。另外,如果您继续按原样运行脚本,则该脚本将追加到文件中。选项文件(脚本)运行的越多,其大小将继续增加。这可能会或可能不会导致读取选项文件的问题。
dhempler

@ dennis.hempler,谢谢,我知道这一点。实际上,我会经常运行此脚本。因为USB调制解调器设备需要将此文件留空才能正常运行。因此,在插入USB调制解调器之前,我先擦除文件,然后再连接到有线互联网,然后在文件中写入这些选项。
德米特里(Dmitriy)

Answers:


15

使用您创建的脚本:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

将其保存为l2tp.sh放在您的主目录或您的主目录中的“脚本”目录中。允许它执行(在终端中编写此命令):

chmod 700 ~/path/to/l2tp.sh

要使用sudo(root特权)执行文件:

方法1。在终端类型中:

$ sudo ~/path/to/l2tp.sh

方法2。使用以下内容创建文件run_l2tp.command:

sudo ~/path/to/l2tp.sh

允许执行:

chmod u+x run_l2tp.command

当您双击run_l2tp.command并输入密码时,将以root特权执行l2tp.sh文件。

一些注意事项:

  • 在类似UNIX的系统上,〜表示“我的主目录”。
  • Chmod 700将使文件只能由您执行。有关更多信息:请参阅此Wikipedia页面
  • 在命令之前键入“ sudo”将使用root特权执行程序。这样做时要小心,如果您不确定自己在做什么,可能会发生不好的事情。
  • 显然,如果直接将此脚本保存在主目录中,则可以省略/ path / to。

4

保存此:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

到您的桌面的文件名为script.sh

打开一个终端窗口并输入:

sudo bash ~/Desktop/script.sh

出现提示时输入密码,文件中的所有命令将以超级用户特权运行。


4

如果出于安全目的,您不希望系统的任何用户都能够运行该脚本,而是希望提示您输入管理密码,则另一种解决方案是保存shell脚本,然后使用该程序。AppleScript编辑器可创建AppleScript。

苹果脚本将是一言以蔽之do shell script «your script's name here» with administrator privileges。将该脚本另存为应用程序。然后,当您单击它时,它将要求您输入管理员密码,然后以管理员权限运行shell脚本。

显然,将其替换«your script's name here»为脚本的路径。


2

问题是,当你在命令行中做到这一点,你在做什么时开始bashsudo,然后发送这些未来两年的命令bash,而不是原来的壳。(标志是您需要exit两次)

在脚本中执行此bash命令时,该命令永不退出,因此接下来的两个命令永不运行。

它不像AppleScript解决方案那样优雅,但是如果您要从命令行作为脚本来执行此操作,则等效为:

#!/bin/sh --
sudo bash -c 'echo "plugin L2TP.ppp">>/etc/ppp/options' 
sudo bash -c 'echo "l2tpnoipsec">>/etc/ppp/options'

如果我们不需要io重定向(该>>位),则可以直接通过调用命令,sudo而无需sudo sh -c技巧。(请注意,我必须引用该参数以sh -c防止它以root身份运行echo,但是该文件以原始用户身份附加。)

可以作为.commandFinder中的文件使用,但是会弹出一个终端窗口,询问您的密码,如果输入正确,将运行命令。(假设您最近尚未通过身份验证sudo...如果您已通过身份验证,它将在不提示的情况下运行)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.