Sftp
將 lftp 與 ssh-agent 一起使用
我有一個登錄 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
.使用者名之後的
,
字元可以解決問題。