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参数都省了:
- 先在客户端执行命令把密钥加载到agent:
ssh-add /home/centos/ftp-clientloc/id-rsa - 然后直接运行简化版的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
相关产品推荐
相关产品推荐

