5

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

例: user1 としてログインしていて、user2 としてスクリプトを実行したいとします。パスワードプロンプトが表示されたくないので、自動入力したいです。公開鍵認証については認識していますが、次のようなものがあるかどうかを確認しようとしています:

sudo -u user2 script.sh

これを cron にしようとしているので、パスワード プロンプトは必要ありません。sudo コマンド自体で処理してほしい。

助けてください

4

2 に答える 2

4

NOPASSWD オプションを/etc/sudoersファイルに追加できます。しかし、セキュリティ上の理由から、それはあなたにとって良いことではないかもしれません.

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 モジュールです) を使用すると、次のようになります。

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

コマンドを実行してcron、user1 の crontab にコマンドを追加できる場合は、それも実行できます。それが最善の解決策かもしれません。

user1$ crontab -e
于 2012-06-19T16:40:55.407 に答える
0

/etc/sudoersIgorが言うように、NOPASSWDオプションを追加するか、最初にuser2のcrontabでコマンドをスケジュールします。

于 2012-06-19T16:46:29.943 に答える