2012-06-19 16 views
5

私はUnixの初心者です。私は別のユーザーとしてシェルスクリプトとコマンドを実行しようとしています。unix - 別のユーザーとしてコマンドを実行する

例: 私はuser1としてログインしており、user2としてスクリプトを実行します。私はパスワードのプロンプトを欲しくないし、それが自動的に入力されるようにしたい。私は、公開鍵認証の承知していますが、私のようなものがあれば見つけるしようとしています:私はこれをcronにしようとしています

sudo -u user2 script.sh 

が、私はパスワードプロンプトをたくありません。私はそれがsudoコマンド自体で処理されることを望みます。

あなたは/etc/sudoersファイルにNOPASSWDオプションを追加することができます

+0

Stack Overflowのこの「オフトピック」のことは決して理解できません。質問の技術を知らない人や質問自体を理解していない人が使用することがよくあります。 – DaveRlz

答えて

4

を助けてください。 セキュリティ上の理由から、あなたには良いことではないかもしれません。

user user2 = NOPASSWD: /usr/local/bin/script.sh 

あなたが持っている別のオプション:sudoを使用しますが、いくつかのスクリプトから直接ではない実行されますが、pexpectまたはexpectを使用して、あなたのためのパスワードを入力すること。これは、セキュリティ上の観点からも理想的ではないかもしれません。スクリプトにパスワードを保存する必要があるからです。あなたが何かを行うことができますexpect

#!/usr/bin/expect 
set password "megapassword" 
spawn /bin/sudo -u user1 /usr/local/bin/script.sh 
expect "password for user:" 
send "$password\r" 
expect eof 

は、そのファイルに500パーミッションを設定することを忘れないでください。 pexpect

(つまり、Pythonのモジュールである)、これは次のようになります。あなたはcronでコマンドを実行し、USER1のcrontabファイルにコマンドを追加することができれば、あなたもそれを行うことができます

import pexpect 
password = "megapassword" 
p = pexpect.spawn("sudo -u user1 /usr/local/bin/script.sh") 
i = p.expect([".ssword:*", pexpect.EOF]) 
p.sendline(password) 

。それが最善の解決策かもしれません。

user1$ crontab -e 
+0

はい、そうですが、パスワードを完全に無効にしたくないのですが、sudoの実行時にパスワードを入力したかったのです。方法はありますか? :( –

+0

@ Kannan Lg:はい、できます! –

0

イゴールが言うように/etc/sudoersでNOPASSWDオプションを追加、または単に最初の場所でuser2のさんのcrontabにコマンドをスケジュールのどちらか。