2012-02-20 113 views
4

在shell腳本文件中,我使用了一些命令,如scpmake install,它們詢問我的密碼。如何在shell腳本中提供密碼?

我運行一個shell腳本編譯一個大的項目,一段時間後,它要求我輸入密碼使用scp。我需要等待該過程並在此之後提供密碼。

我只想通過沒有交互的shell腳本來完成所有操作,那麼如何避免在這裏提示輸入密碼?

+0

在shell腳本中寫明文密碼的任何解決方案? – 2012-02-20 09:20:57

+0

這可能屬於serverfault – StingyJack 2012-11-21 20:12:45

回答

4

如果您不能使用ssh的信任,必須在你的腳本以後輸入密碼,使用read -s -p "Password:" USER_PASSWORD在密碼默讀。然後,您可以export USER_PASSWORD一個expect腳本,避免它被顯示在ps

#!/usr/bin/expect -f 
    spawn scp some.file [email protected]:~ 
    expect "assword:" 
    send -- "$env(USER_PASSWORD)\r" 
    expect eof 
5

我認爲這是generate an authentication key一個更好的主意,並使用該密鑰的身份驗證,而不是寫作純文本密碼到腳本中。

+0

這是以前的兩個答案的重複。 – 2012-02-20 09:16:55

+4

這是寫在同一時間!感謝downvoting! – 2012-02-20 09:17:47

2

不,你不會發現使用SSH配置文件或命令行選項,硬編碼密碼的任何方法,我敢肯定,這是由設計。

如果你的環境使這個困難,或許會有助於瞭解該腳本可以使用-i參數指定標識文件,因此你不必有一個整體的主目錄設置或類似的東西。還有其他選項可以幫助使用ssh真正鼓勵通過密碼認證的密鑰認證。

如果您正在使用這個橫跨你不希望誰被人打擾創建密鑰並將其複製到服務器的多個用戶,你可以腳本也。檢查現有密鑰並進行快速測試以查看是否可以與其建立連接並不困難。如果你不能沒有密碼,那麼你將ssh-copy-id發送到服務器,詢問一次ssh密碼,然後在腳本開始處,在啓動和運行腳本之間就會發生很小的延遲將只有一次。你甚至可以在每個用戶的〜/ .script/key /目錄中爲腳本設置一個單獨的密鑰,這樣你就可以阻止用戶訪問SSH服務器。

如果你想真正限制哪些可以由用戶在遠程服務器上完成,你可以使用RSSH作爲遙控器上的帳戶,這將限制傳輸文件的用戶訪問的外殼。

1

使用鍵時的身份驗證是不可能的,或者使用密碼需要我們在過去提供的密碼所需的腳本這樣做的一個好辦法對於應用程序,服務,MySQL,不管...我們將密碼存儲在加密文件中,然後在運行時解密此文件以向腳本提供密碼。

密碼解密腳本,讓我們叫它,yourcreds.rb,僅限於根只使用過程中和未加密的密碼wern't存儲在任何地方。因此,例如,您可以運行:

root @ host:〜#yourcreds。rb | grep mysql | awk {'print $ 3'}

其中沒有awk會輸出存儲的行: service |用戶|密碼|描述| etc ... mysql mysqluser password ....

使用yourcreds.rb(或其他),您可以輸出密碼並輕鬆將此方法合併到大型或更復雜環境中的腳本/ cron作業中。

另外,如果我沒有記錯,我們不必使用grep/awk或任何東西。我們剛剛在opts中進行了編程解析,如:yourcreds.rb list mysql或yourcreds.rb -l等。

我們使用河豚和yamls來存儲加密密碼。我相信你可以創造性。只要確保它對除root之外的任何人都是防彈的。

相關問題