某大神寫了個程序,每次服務器開機是必須執(zhí)行這個程序,這個程序必須用sudo管理員的權限執(zhí)行才有效,每次開機后都要去手動執(zhí)行這條命令,懶人怎么受的了?于是乎,我想到把這個命令添加到系統(tǒng)啟動項里面,但是,普通命令好添加,必須加sudo的命令怎么添加呢?網(wǎng)上百了半天沒百到,糾結,都怪自己linux沒學好,以后還要研究研究linux怎么啟動。這條路沒走通就換一條吧。我昨天提到用pexpect實現(xiàn)自動交互,試了一下,很爽!哈哈,完美的完成了我的任務!看下面的示例代碼:
import pexpect
def RunCmd(cmd,passwd):
run = pexpect.spawn(cmd)
try:
i = run.expect(["sudo"])
if i == 0:
run.sendline(passwd)
run.sendline("yes\n")
r = run.read()
print r
except:
print 'Error'
if __name__=='__main__':
cmd = 'sudo apt-get remove emacs'
passwd = ""
RunCmd(cmd,passwd)
昨天的ssh批量遠程登錄并執(zhí)行命令這個問題(http://www.cnblogs.com/ma6174/archive/2012/05/25/2508378.html),有個缺陷,就是必須開啟root管理員賬戶,以管理員的身份去執(zhí)行命令,這樣做是有風險的(你懂得),對于這種必須要必須要加sudo才能執(zhí)行的命令,用自動交互來執(zhí)行更好,這樣我們可以把兩種方式結合起來,思路是這樣的:
首先把上面的python腳本放在某個服務器上(本地建一個apache服務器就行),然后ssh登錄遠程主機(非root用戶),用wget讓主機去下載服務器上面的python腳本,然后在遠程主機上執(zhí)行遠程腳本,執(zhí)行完后把這個腳本立即刪除。