2015-02-09 81 views
-2

大家早上好!我有一個bash腳本自動啓動時,通過在用戶的主目錄中的.profile文件在系統啓動:ssh與sudo無法正常工作

須藤menu.sh

腳本開始。但是,正如預期,稱東西像SSH聯合國@地址時,在腳本中,known_hosts文件被放置在/root/.ssh目錄中,而不是調用腳本的用戶帳戶!我嘗試修改.profile來調用'sudo -E menu.sh'和'sudo -H menu.sh',但都沒有在調用腳本的用戶主目錄中創建known_hosts文件。我的/ etc/sudoers如下:

# Declarations 
Defaults env_keep += "HOME USER" 

# User privilege specification 
root ALL=(ALL) ALL 
user ALL=NOPASSWD: ALL 

任何幫助將不勝感激!

感謝 戴夫

更新:所以我做了一個解決辦法是要經過腳本,並添加特定之前調用「須藤-u $ USER」(因爲須藤應該保持$ USER的環境變量)。這對我來說似乎是解決這個問題的一個非常糟糕的方式。它sudo應該在啓動menu.sh時保留USER和HOME目錄變量,爲什麼我需要爲特定用戶再次顯式調用sudo以保留該信息(即使sudo被告知通過/ etc/sudoers文件)。沒有線索,但想要更新這篇文章的任何人遇到它,直到找到更好的解決方案。

+3

抱歉,系統啓動時,用戶主目錄中的.profile腳本通常不會被執行。只有當該用戶登錄系統時才執行(如果有的話)。 – arkascha 2015-02-09 16:19:50

+0

感謝您的快速評論arkascha。該腳本按設計加載,因此.profile腳本沒有任何問題。任何其他想法? – user1646428 2015-02-09 16:22:10

+0

我不是故意說腳本沒有執行。我只想指出這個問題是不健全的。關於這個問題:當然,根主目錄內部會生成一個known_hosts文件,因爲它是生成另一個進程的根用戶(這裏是ssh客戶端)。那麼爲什麼你聲稱sudo工作不正常?它完全按預期工作。 – arkascha 2015-02-09 16:22:48

回答

0

關於OpenSSH,known_hosts的默認位置是~/.ssh/known_hosts。在文件名中擴展「〜」時,Ssh不會兌現$ HOME。它查找用戶的實際主目錄並使用它。當你以root用戶身份運行ssh時,無論你設置了HOME爲何,它都將解釋相對於root主目錄的路徑名。

你可以嘗試ssh的參數UserKnownHostsFile設置爲你想要使用的文件的名稱:

ssh -o UserKnownHostsFile=$HOME/.ssh/known_hosts [email protected] 

然而,你應該對此進行測試。 Ssh可能會抱怨使用屬於另一個用戶的文件,如果它必須更新該文件,那麼該文件最終可能會被root用戶所擁有。

真的,你最好使用ssh作爲你想要ssh使用的.ssh文件夾。通過sudo運行流程會產生一種風險,即用戶可以找到一種方法來處理您無意做的事情。您應該儘可能少地使用提升的特權來限制風險。

+0

我經常碰到文件這些技巧後的權限問題。請記住,_if_ ssh符合文件仍將由用戶root創建。因此,普通用戶的後續ssh調用將無法寫入該文件... – arkascha 2015-02-09 19:20:23

+0

感謝Kenster的回覆。問題是這個腳本有幾件事需要root權限(因此腳本通過sudo運行)。我會認爲通過保持某些env變量不變,腳本中的被調用的二進制文件將使用該信息而不是提升的賬戶信息。到目前爲止,看起來我所採取的步驟是唯一可行的解​​決方案。 – user1646428 2015-02-09 19:45:44