将 lftp 与 ssh-agent 一起使用

sjk*_*sjk 5 sftp ssh-agent lftp

我有一个登录到 sftp 服务器的脚本

eval `ssh-agent -s`
ssh-add /home/<username>/.ssh/id_rsa
sftp <username>@<target>
Run Code Online (Sandbox Code Playgroud)

这有效,但我只想获取比特定日期更新的文件。使用 sftp 似乎不可能,所以我想使用lftp

如果我尝试使用 lftp 运行相同的脚本

eval `ssh-agent -s`
ssh-add /home/<username>/.ssh/id_rsa
lftp <username>@<target>
Run Code Online (Sandbox Code Playgroud)

我收到输入密码的提示。是否可以将 lftp 与 ssh-agent 一起使用,或者是否有其他方法可以避免提供密码?

小智 20

它实际上只是 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选项重新配置(因此是上面列出的第二个选项)。


小智 6

最简单的方法是:lftp -u username, sftp://hostname.

,用户名后的字符可以解决问题。


Hau*_*ing 1

sftp听起来lftp很相似,但在“连接和身份验证层”上几乎没有共同点。sftp使用 SSH 进行连接和身份验证,并在完成后使用 SSH 的内部 SFTP 服务器。在其默认模式下,lftp连接到 FTP 服务器,与 SSH 无关(因此与ssh-agent其中任何一个)。它也可以连接到 SFTP 服务器,但这与本例无关。

  • 事实上,lftp_确实_支持sftp,而不仅仅是ftp。 (9认同)