You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS环境下配置lftp+SFTP+SSH密钥连接时消除密码提示的方法

CentOS环境下配置lftp+SFTP+SSH密钥连接时消除密码提示的方法

兄弟,你这情况我之前碰过!明明ssh和sftp裸连都不用输密码,偏偏lftp+sftp就弹密码框,按Ctrl+C还能直接进入连接——这其实是lftp的命令行参数转义或者配置优先级的小坑,给你几个靠谱的解决办法:

一、先修正命令行的参数转义问题

你原来的命令里用了"这种HTML转义字符,lftp大概率没正确识别,把它换成正常的双引号就行(因为外层的-e参数用的是单引号,里面嵌套双引号完全没问题)。调整后的命令如下:

lftp sftp://centos@ipaddress -e 'set sftp:auto-confirm yes; set sftp:connect-program "ssh -a -x -o StrictHostKeyChecking=no -i /home/centos/ftp-clientloc/id-rsa"; ls'

试一下这个,应该就不会弹密码提示了——之前的转义符号导致lftp没正确读取ssh的密钥参数,才会多此一举要密码。

二、用lftp配置文件永久解决(更省心)

每次命令行输一大串参数太麻烦,直接把配置写到lftp的用户配置文件里,一劳永逸:

  • 在家目录创建或编辑.lftprc文件(如果没有就新建):
    vi ~/.lftprc
    
  • 添加以下配置内容:
    set sftp:auto-confirm yes
    set sftp:connect-program "ssh -a -x -o StrictHostKeyChecking=no -i /home/centos/ftp-clientloc/id-rsa"
    
  • 保存退出后,直接用lftp sftp://centos@ipaddress就能连接,全程不会弹密码;如果需要直接执行ls,就用lftp sftp://centos@ipaddress -e 'ls'

三、借助ssh-agent简化配置(适用于常用agent管理密钥的场景)

要是你平时习惯用ssh-agent管理密钥,也可以把密钥加到agent里,这样lftp会自动通过agent获取密钥,连指定-i参数都省了:

  1. 先在客户端执行命令把密钥加载到agent:
    ssh-add /home/centos/ftp-clientloc/id-rsa
    
  2. 然后直接运行简化版的lftp命令:
    lftp sftp://centos@ipaddress -e 'set sftp:auto-confirm yes; ls'
    

这样lftp会自动复用agent里的密钥,不会触发密码提示。

顺便解释下为啥按Ctrl+C能连上?

其实那时候ssh已经通过密钥认证成功建立连接了,只是lftp的提示逻辑有点滞后,还停留在等待密码输入的界面,你按Ctrl+C中断了这个多余的提示流程,lftp就直接跳转到已建立好的连接里了——本质还是一开始的命令参数没配置对,导致lftp没正确识别密钥。

备注:内容来源于stack exchange,提问作者JCDani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 13:05:30