2017-11-15 18 views
1

私はいくつかのタスクの実行を自動化しようとしていますが、sudoとして実行する必要があります。sudoを使って別の端末でコマンドを実行するにはどうすればいいですか?

別々の端末で実行したいので、それぞれの出力を見ることができます。ここで

(私は何をしようとしていますが、より複雑であるため)私はセットアップを持って、最小限の例の一種である

セットアップ2つのファイルは - データが唯一のルートとして読めるであり、例えばテキストの3行が含まれていることに注意してください:

-rw------- 1 root root  33 Nov 15 09:29 data 
-rwxrwxrwx 1 root root  11 Nov 15 09:30 test.sh* 

test.shは、次のようになります。また、私はbashの起動時における設定である「SESSION_MANAGER」と呼ばれるユーザー・レベルの変数を持って

#!/bin/bash 
cat data 
read -p "Press enter to continue" 

...と思われますいくつかの問題が発生します(後の例を参照)。

これで、このスクリプトを実行しているさまざまな端末を生成します。私は、次の試み:

試み1

xfce4-terminal -e './test.sh' 

出力:

cat: data: Permission denied 
Press enter to continue 

試み2 - sudoを使用開始時

~/src/sandbox$ sudo xfce4-terminal -e './test.sh' 
Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined 

(xfce4-terminal:6755): IBUS-WARNING **: The owner of /home/openbts/.config/ibus/bus is not root! 

出力:

this is some data 
more data 
end 
Press enter to continue 

ここで、データファイルの出力が正常に印刷されていることがわかりますが、セッションマネージャー変数に問題があります。

試み3 - コマンドでsudoを使用して

~/src/sandbox$ xfce4-terminal -e 'sudo ./test.sh' 

出力:openbtsため

[須藤]パスワード: これは、いくつかのデータ より多くのデータ エンド を押して

を続行します

ここではすべてがうまくいっていることがわかります...しかし、パスワードをもう一度入力する必要がありました。私の自動化を殺す:(

試み4 - ルート

~/src/sandbox$ sudo su 
[email protected]:/home/openbts/src/sandbox# xfce4-terminal -e './test.sh' 
Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined 

出力として起動:

this is some data 
more data 
end 
Press enter to continue 

ここでは、再び出力がよさそうだが、私はこのSESSION_MANAGERの問題を持っています...また、新しいxfce4-terminalは、フォント/ルックアップがうまくいきません - これはrootユーザの設定だと思います。

質問

どのように私は新しいターミナルにtest.shそれぞれの複数のインスタンスを実行し、パスワードを入力します(またはすべてで対話)することはできません。プロセスの開始時に元の端末にパスワードを1回入力することはできますか?

sudo suに入っているときにこの種の作業をしていますが、この問題はSESSION_MANAGER変数です - 問題であるかどうかはわかりませんが、非常に乱雑ですが、xcfe4-terminal (私は自分のユーザー設定と同じルート設定を変更することができると思う)悪い見えます。ですから、rootとして実行しているときにSESSION_MANAGERの問題を回避するにはどうすればいいですか?

答えて

1

別の端末を起動する前にuser-idを変更すると、session-managerの問題が表示されます。だから解決策は、端末でsudoを実行することです。

sudoにパスワードを入力する必要はありません。あなたは

yourname ALL=(ALL) NOPASSWD: ALL 

/etc/sudoersに(少なくともSlackwareの上)を追加することによってそれを行うことができます。また、ファイルに対するアクセス権を正しく設定して、常にrootを必要としないようにすることもできます。

この行を追加するとセキュリティに影響があります。 catをパスワードなしで(あなたの例では)許可するか、sudoのためのより精巧なルールを作成することができます。私が与えたラインは単なる例です。個人的には、私はファイルパーミッションを調べます。

+0

Ljmありがとう、私は確かにこのアイデアのための+1を与えるだろう。私は "本当の"ケースで許可を変更することはできません。なぜなら、実行したいものは、アクセス権が制限されているさまざまなlibs /データベースを使用するすべてのアプリケーションです - しかし、私はログインで保護されているVM(publicではない)パスワードを知っている人なら誰でも、VMを使って自分が望むことをすでに行うことができます。私のユーザー名は "openbts"なので、openbts ALL =(ALL)NOPASSWDL ALLを追加するだけでいいのですか? –

+0

最後に ':ALL'を意味する。type-o –

+0

Ok - これを試したが、うまくいかなかった。私はログアウトして戻ってきました。確かに...喜びはありません。あなたが提案した行に入り、 'xfce4-terminal -e 'sudo。/ test.sh''を実行し、新しいウィンドウでパスワードを入力しなければなりません...:( –

関連する問題