2015-05-28 66 views
1

我正在編寫一個Rails應用程序,它由用戶A運行。現在有一些其他用戶B,它有權在其他服務器上ssh並在該服務器上運行一些命令。代碼如下:Ruby與不同用戶運行bash命令

Net::SSH.start(server, username, :password => password) do |ssh| 
    ssh.exec("set of commands authorised to B") 
end 

我怎樣才能改變用戶在執行時上述任務,不是再次搬回到用戶A.我被檢查寶石popen4,但未能發現b。如果我可以開始與一個過程不同的用戶。

+0

我不完全知道你在這裏真正問的是什麼,但是當你通過ssh連接時,你將運行一個shell作爲你用來連接的用戶。例如。如果我運行'ssh saurabh @ example.com',我將在遠程服務器(example.com)上以'saurabh'登錄,而不是以本地unix用戶身份登錄,或者在用戶擁有Web進程的情況下以rails身份登錄。 – max

回答

3

在UNIX進程模型中,您可以在用戶之間切換,但只有在您使用root級別的訪問權限運行時才允許這樣做,這對大多數進程來說通常都是一個壞主意。

的機械過程是:

Process.uid = uid_of_user_b 

該員工Process.uid=以實現變革,但它會報錯了,如果你不能做到這一點。

sudo工具是一個很好的選擇。你可以做這樣的事情:

sudo -u user_b command 

這將取決於sudo被正確設置你的用戶。