我有一个登录 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 服务器,但这与本例无关。