2011-05-05 61 views
10

我試圖使用ssh保留sudo的環境

這裏從不同的服務器執行腳本的命令我使用從服務器1到服務器2發起查詢:

ssh -t [email protected] "cd /var/www/vhosts/xxxxx/subdomains/preprod/; sudo ./replace.sh"; 

但問題是,當我做sudo$home = /root而腳本是:/var/www/vhosts/xxxxx/subdomains/preprod/

我怎樣才能告訴sudo保護環境?

我試過sudo -P -,sudo -H,沒有任何運氣。

+1

是否replace.sh使用來自其所執行的路徑?否則,你可以做sudo /var/www/vhosts/xxxxx/subdomains/preprod/replace.sh。 – Tommy 2011-05-05 19:47:15

+0

謝謝你花時間回答這個問題,它就是這樣工作的。 但我更感興趣知道是否有一個參數,我們可以傳遞給sudo保持當前的路徑,而不是將其設置回根... – Tarek 2011-05-05 20:05:01

回答

16

這就是我從手冊頁得到的。

sudo -E 

-E的-E(保護環境)選項將覆蓋在sudoers中的env_reset 選項(5))。當匹配的 命令具有SETENV標記或在sudoers(5)中設置了 setenv選項時,僅有 可用。

+1

昨天也試過這個選項,它失敗了:) – Tarek 2011-05-06 13:21:13

+1

顯然是修改儘管-E(特別是在Ubuntu中,默認情況下發生這種情況)仍然可以發生PATH環境變量作爲安全問題。請參閱http://stackoverflow.com/questions/257616/sudo-changes-path-why – rogerdpack 2013-11-13 16:49:18

+1

@Tarek使用-E可能受限於您的管理員,因爲environemtn變量可能會造成傷害。雖然在這種情況下sudo應該回來,並明確聲明:你不能使用-E。如果它只是默默地失敗了,你將會遇到不同的問題。 – TorstenS 2017-08-16 10:18:01