2012-06-19 53 views
5

我是Unix的新手。我試圖以另一個用戶的身份運行一個shell腳本和命令。unix - 以另一個用戶身份運行命令

例如: 我以user1身份登錄並希望以user2身份執行腳本。我不想要密碼提示,我希望它被自動輸入。我知道公鑰認證的,但我試圖找到,如果有這樣的:

sudo -u user2 script.sh 

我試圖與cron這一點,所以我不想密碼提示。我希望它在sudo命令中處理。

請幫助

+0

Stack Overflow上我永遠不會理解這個'偏離主題'的東西 - 經常讓我覺得它被那些不知道問題中的技術或不明白問題本身的人使用。 – DaveRlz

回答

4

您可以添加NOPASSWD選項/etc/sudoers文件。 但是,出於安全原因,這可能對您沒有好處。

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

,你有另一種選擇:使用sudo,而是直接從一些腳本運行它沒有,但使用pexpectexpect,會爲你輸入密碼。從安全角度來看,這也可能並不理想,因爲您需要將密碼保存在腳本中。

隨着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 
+0

是的,你是對的,我不想完全禁用密碼,但想在sudo運行時輸入密碼。有沒有辦法? :( –

+0

@Kannan Lg:是的,我們可以! –

0

無論是在/etc/sudoers擺在首位加NOPASSWD選項,伊戈爾說,或只是在user2的調度命令的crontab中。

相關問題