2012-07-24 121 views
12

特定のコマンドを実行してから、スクリプトの残りの部分を実行するためにユーザーをrootに変更するには、root以外のユーザーアカウントが必要なシェルスクリプトがあります。私はSUSE11を使用しています。 パスワードプロンプトを自動化するためにexpectを使用しました。しかし、 spawn su - を使用すると、コマンドが実行されると、プロンプトがrootに戻り、スクリプトの残りの部分は実行されません。シェルスクリプト内のrootユーザーに変更する

例:

< non-root commands> 
spawn su - 
<root commands> 

しかし、suの後にプロンプ​​トが表示されると、ユーザーはrootとなります。 スクリプトの残りの部分を実行する方法。

sudo -Sオプションは、マシンのIPアドレスを見つけるのに必要なsudo -S ifconfigコマンドを実行しないので役に立ちません。

私はすでに、これらのリンクを介して行っているが、解決策を見つけることができませんでした。事前に Change script directory to user's homedir in a shell script

Changing unix user in a shell script

感謝を

答えて

15

sudoここで働いていますが、少しあなたにスクリプトを変更する必要があります:

$ cat 1.sh 
id 
sudo -s <<EOF 
echo Now i am root 
id 
echo "yes!" 
EOF 

$ bash 1.sh 
uid=1000(igor) gid=1000(igor) groups=1000(igor),29(audio),44(video),124(fuse) 
Now i am root 
uid=0(root) gid=0(root) groups=0(root) 
yes! 

オムランド<<EOFブロックにブロックを与えてsudoにします。

もちろん、suを使用することもできます。しかし、パスワードを入力するexpect/pexpectを使用して実行する必要があります。

しかし、たとえあなたが自動的にパスワードを入力します(または、それをオフに切り替える)この構造は働かないために管理することができますケース:

user-command 
su 
root-command 

この場合root-commandがあるため、ユーザーと、ないroot権限で実行されますsuが終了すると実行されます(suは新しいシェルを開き、現在のシェルのuidは変更しません)。

su -c 'sh -s' <<EOF 
# list of root commands 
EOF 

しかし、今は sudoと同じを持っている:あなたはもちろん、ここで同じトリックを使用することができます。

1

これを行う最も簡単な方法は、少なくとも2つのスクリプトを作成することです。

最初のものは、ルート権限で2番目のものを呼び出す必要があります。したがって、2番目のスクリプトで実行するすべてのコマンドは、rootとして実行されます。例えば

runasroot.sh

sudo su-c'./scriptname.sh' 

SCRIPTNAME。sh

apt-get install mysql-server-5.5 

または必要なものを入力してください。

+0

rootの代わりに$ USERNAME2と呼ぶことができますか? ありがとうございます。 – raja777m

8

2番目のスクリプトなしで簡単に行うことができます。これをファイルの先頭に置いてください:

if [ "$(whoami)" != "root" ] 
then 
    sudo su -s "$0" 
    exit 
fi 

次に、自動的にrootとして実行されます。もちろん、これはあなたがパスワードを提供することなくsudo suできることを前提としていますが、それはこの回答の範囲外です。シェルスクリプトでのsudoの使い方に関するその他の質問の1つを参照してください。

+0

注意してください。 '' $ 0 ''(あなたがそれとは思わないかもしれない)(http://mywiki.wooledge.org/BashFAQ/028)。 – ELLIOTTCABLE

+1

@ELLIOTTCABLEこれは面白いですが、$ 0は現在のファイルへのパスではなく、現在のプロセスを開始するコマンドなので、少し壊れにくいと仮定しています。それでも、良い点、そして非常に役に立つリンク。パスワードプロンプトには – Benubird

+0

を使用してください。 'echo $ PASSWORD | sudo -S su -c "$ 0" ' – Leathan

関連する問題