ルート権限を必要とするbashスクリプトを実行するにはどうすればよいですか?


15

ISPから次のスクリプト行があります。

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

ターミナルに1行ずつ貼り付けると機能します。* .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スクリプトには通常、ipsh.shという.shサフィックスが付いています。
アーロン湖

1
参考までに、このスクリプトは一度だけ実行する必要があります。また、スクリプトをそのまま実行し続けると、ファイルに>>が追加されます。オプションファイルは、実行するたびにサイズが大きくなり続けます(スクリプト)。これにより、オプションファイルの読み取りで問題が発生する場合と発生しない場合があります。
-dhempler

@ dennis.hempler、ありがとうございます。実際、私はこのスクリプトを頻繁に実行します。USBモデムデバイスでは、正常に動作するためにこのファイルを空にする必要があります。そのため、USBモデムを挿入する前にファイルを消去し、有線インターネットに接続する前にこれらのオプションをファイルに書き込みます。
ドミトリー

回答:


15

作成したスクリプトを使用します。

#!/bin/bash

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

ホームディレクトリ、またはホームディレクトリ内の「scripts」ディレクトリにl2tp.shとして保存します。実行を許可します(ターミナルでこのコマンドを記述します):

chmod 700 ~/path/to/l2tp.sh

sudo(ルート権限)を使用してファイルを実行するには:

方法#1。ターミナルタイプ:

$ sudo ~/path/to/l2tp.sh

方法#2。次の内容のファイルrun_l2tp.commandを作成します。

sudo ~/path/to/l2tp.sh

実行を許可します。

chmod u+x run_l2tp.command

run_l2tp.commandをダブルクリックしてパスワードを入力すると、l2tp.shファイルがルート権限で実行されます。

いくつかのメモ:

  • UNIXのようなシステムでは、〜は「my home directory」の略です。
  • Chmod 700は、あなただけがファイルを実行可能にします。詳細については、このウィキペディアのページをご覧ください
  • コマンドの前に「sudo」と入力すると、ルート権限を使用してプログラムが実行されます。これを行うときは注意してください、あなたが何をしているかわからない場合、悪いことが起こる可能性があります。
  • このスクリプトをホームディレクトリに直接保存した場合、明らかに/ 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

セキュリティのために、システムのユーザーにスクリプトを実行させたくないが、管理パスワードの入力を求められる場合は、シェルスクリプトを保存してからプログラムを使用する方法がありますAppleScriptを作成するAppleScript Editor

AppleScriptは、ワンライナーになりますdo shell script «your script's name here» with administrator privileges。そのスクリプトをアプリケーションとして保存します。次に、それをクリックすると、管理者パスワードの入力が求められ、管理者権限でシェルスクリプトが実行されます。

明らかに、«your script's name here»スクリプトへのパスに置き換えます。


2

問題は、コマンドラインから実行すると、で開始bashsudo、次の2つのコマンドをbash元のシェルではなくに送信することです。(サインはあなたがexit二度する必要があるということです)

スクリプトで実行すると、bashコマンドは終了しないため、次の2つのコマンドは実行されません。

AppleScriptソリューションほどエレガントではありませんが、コマンドラインからスクリプトとしてこれを実行する場合、同等のものは次のようになります。

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

ioリダイレクト(>>ビット)が必要ない場合はsudosudo sh -cトリックを必要とせずにコマンドを直接呼び出すことができます。(またsh -c、ルートとしてエコーを実行しないようにするために引数を引用する必要がありましたが、ファイルは元のユーザーとして追加することに注意してください。)

これは、なりますように動作.commandFinderからファイルが、それはあなたのパスワードを要求、ターミナルウィンドウを開きますし、正しく入力した場合は、コマンドを実行します。(最近認証されていないsudo場合...持っている場合は、プロンプトなしで実行されます)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.