2011-04-15 81 views
2

我是剛剛接觸shellcripting(並且在Linux世界中並沒有很好地旅行),並且試圖獲得一個shellcript以自動登錄到我的給定的sftp服務器。現在這是我得到多遠了獲取shellcript輸入密碼

#!/bin/bash 
HOST='somehost.com' 
USER='someusername' 
PASSWD='somepass' 

sftp [email protected]$HOST 

現在,這是我遇到麻煩。在這一點上,我將被提示輸入密碼。那麼如何讓腳本在提示時自動用密碼回覆?我也嘗試找到一種方法來通過sftp命令傳遞密碼,但沒有運氣。任何人都可以幫我解決這個問題嗎?

回答

2

將密碼包含在命令行或此類腳本中並不是一個好主意。任何有權訪問正在運行的進程列表的人都可以看到您的密碼,最終可能會出現在您的shell歷史記錄和日誌文件中。所以這會造成安全漏洞。

有更多的信息在this thread其中建議基於密鑰的身份驗證超過您提出的方法。

2

不要在腳本文件中存儲密碼,除非你強迫執迷於絕對嚴格的權限。

對於所有的事情ssh/sftp/scp,使用公鑰認證。瞭解您可以在客戶端和服務器端設置的設置,以使其更安全(IP限制,用戶限制,密碼限制,重試次數,同時登錄次數等)。僅此一項就能消除很多不安全因素腳本問題。

如果您絕對必須將密碼存儲在變量中,請不要將其導出,並在完成使用後立即將其解除。

1
  1. 本地主機(其中的腳本將被執行)上生成SSH密鑰對:

    scriptuser @ scripthost:/〜$ SSH-凱基-t RSA 生成公共/私有密鑰對。 輸入文件中保存密鑰(/home/michal/.ssh/id_rsa):{!按ENTER} (...)

  2. 副本中生成的從scripthost公鑰的somehost.com和追加它到認證主機列表:

    scriptuser @ scripthost:/〜$ cat〜/ .ssh/id_rsa.pub | SSH [email protected] '貓>>的.ssh/authorized_keys的'

  3. 現在你應該可以使用scp或者SFTP無密碼:

    scriptuser @ scripthost:/〜$ SCP /任何/本地/文件[email protected]:/遠程/位置/

3

使用此代碼:

#!/bin/bash 
HOST='somehost.com' 
USER='someusername' 
PASSWD='somepass' 

echo $PASSWD | sftp [email protected]$HOST 
+0

這是行不通的。 passwordprompt需要一段時間才能返回,所以需要等到提示出現。將密碼管理到sftp命令將在sftp提示輸入密碼之前輸入密碼 – Sondre 2011-12-15 13:39:40

+0

它不起作用! :-( – Anand 2012-09-21 13:30:24

0

使用sshpass命令。 你可以隨命令一起給密碼