2010-09-07 114 views
5

我在寫一個調用很多其他腳本的bash腳本。
幾個腳本必須以user_1身份執行,但幾個腳本必須以user_2身份執行。
腳本應該按照嚴格的順序調用。我以user_1的身份啓動腳本,並多次使用su來成爲user_2。這些時間蘇需要一個密碼,所以我不得不重新輸入多次。 我想避免這種情況,但su沒有密碼參數。
sudo和expect沒有安裝。使用更多用戶執行腳本

回答

0

我已經用ssh解決了這個問題。我爲user_1生成了身份驗證密鑰併發布到了user2。密碼不再需要。

ssh -l user_1 hostname "command_1; command_2" 
1
  • 爲user_1和user_2分叉(使用'&')。他們應該使用「鎖定文件」(信號量)進行通信(與客戶端服務器類似)。例如USER_1什麼事情而user_2檢查是「鎖文件」存在於,而...睡眠循環

  • 也許這是愚蠢的,但你可以使用ssh [email protected]結束鍵

+0

這也是我的第一個想法,它肯定是一個偉大的解決方案。我覺得這太危險了。當劇本變得更加複雜時,將來可能會導致問題。 – 2010-09-10 11:42:08

1

如果你碰巧有zsh的,我想你可以很容易地做到這一點 - 是這樣的:

#!/bin/zsh 
coproc user1_script 
su user2 
do_stuff 
echo "your_turn" >&p 
read MY_TURN 
do_more_stuff 
echo "your_turn" >&p 
read MY_TURN 
... 

user1_script:

#!/bin/zsh 
read MY_TURN 
do_stuff 
echo your_turn 
read MY_TURN 
do_more_stuff 
... 

如果你被困住了,並且擁有zsh,無論如何它都值得一試。

+1

Bash 4和ksh也有coprocesses。 – 2010-09-07 14:53:59

1

你可以以root身份運行。聽起來有風險嗎?如果你不小心與前面加上蘇每個命令,並添加用戶名,像這樣:

蘇-c「SCRIPT1」 USER_1 & &蘇-c「SCRIPT2」 user_2

這將(假設你開始以root )將用戶更改爲user_1,然後再運行script1,然後回到root,然後更改爲user_2以運行script2 ..全部不需要多個密碼。

+0

聽起來不錯,但我的腳本必須在公司服務器上運行。 root密碼僅爲系統管理員所知。 – 2010-09-10 11:36:46

+0

你能否提供一些關於你爲什麼需要這兩個用戶的更多細節?你有兩個密碼..你可能最後結果文件嗎? – Spaceghost 2010-09-10 15:36:50

+0

這將是一個安裝腳本。我們爲我們的應用使用了2種不同的工具。這兩種工具都需要作爲特殊用戶進行安裝。這個規則是工具生產者所要求的。這些工具的組件是相互構建的。這意味着我必須安裝第一個工具,而不是啓動一些組件。接下來,我必須安裝2.工具,從第一個工具啓動其他組件,執行一些其他操作。這是粗略的情況。 – 2010-09-13 08:50:19

相關問題