Sftp

將 lftp 與 ssh-agent 一起使用

  • February 7, 2019

我有一個登錄 sftp 伺服器的腳本

eval `ssh-agent -s`
ssh-add /home/<username>/.ssh/id_rsa
sftp <username>@<target>

這可行,但我只想獲取比特定日期新的文件。sftp 似乎無法做到這一點,所以我想使用lftp

如果我嘗試使用 lftp 執行相同的腳本

eval `ssh-agent -s`
ssh-add /home/<username>/.ssh/id_rsa
lftp <username>@<target>

我收到密碼提示。是否可以將 lftp 與 ssh-agent 一起使用,或者是否有其他方法可以避免提供密碼?

它實際上只是 LFTP 的一個缺陷,它甚至要求輸入密碼。如果您提供一個虛擬密碼​​,例如文字字元串DUMMY(例如lftp sftp://<username>:DUMMY@<target>),lftp 將不會提示輸入密碼,然後會隨後與 ssh 代理進行檢查。請注意,如果您沒有設置密鑰,則將使用該密碼。

或者,您可以覆蓋 lftp 的sftp:connect-program設置以強制 ssh 使用特定的密鑰文件,而無需設置代理(仍然需要虛擬密碼)。(一種方法)可以這樣做是這樣的:lftp sftp://<username>:DUMMY@<target> -e 'set sftp:connect-program "ssh -a -x -i <yourprivatekeyfile>"'.

sftp:connect-program是 lftp 用來創建 sftp 會話的選項。它預設為ssh -a -x,但幾乎可以是任何命令(有關確切限制,請參見 lftp 手冊頁)。在這裡,我只是-i添加了強制使用特定私鑰的選項。

(注意:<xxx>以上範例中的所有位都應替換為實際值。


要糾正已接受答案中的一些內容…

  • SSH 中沒有內部 FTP 伺服器;sftp 是它自己的協議,設計為 ssh 的擴展。它最後只有“ftp”,因為它是一種文件傳輸協議,它們在細節方面幾乎沒有共同之處。
  • 此外,雖然 LFTP 可以直接連接到 FTP,但它也可以連接到大量其他協議。使用sftp連接時,直接呼叫ssh來處理建立連接,因此所有正常的ssh認證方式都適用。LFTP 用來呼叫 ssh 的命令可以通過它的sftp:connect-program選項重新配置(因此上面列出了第二種選擇)。

最簡單的方法是:lftp -u username, sftp://hostname.

使用者名之後的,字元可以解決問題。

引用自:https://unix.stackexchange.com/questions/181781