将 lftp 与 ssh-agent 结合使用

将 lftp 与 ssh-agent 结合使用

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

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

这可行,但我只想获取比特定日期更新的文件。这对于 sftp 来说似乎是不可能的,所以我想使用远程传输协议

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

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

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

答案1

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

答案2

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

用户名后面的字符,就可以了。

答案3

通过在用户名后插入冒号,也可以在站点字符串本身中提供空密码;lftp sftp://<user>:@<site>

答案4

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

相关内容