8

我正在尝试登录一个ftps站点。我尝试在命令行中提供登录凭据(并将set参数放入~/.lftprc,然后打开lftp会话并使用lftp作业控制语句输入这些参数。无论如何,我一直遇到同样的障碍:

 421 Sorry, cleartext sessions are not accepted on this server.
 Please reconnect using SSL/TLS security mechanisms.

我用以下参数走得最远,但不断收到上面的错误。

如何lftp从命令行使用 SSL/TLS 安全机制?

目标是使用 bash 编写访问该 ftps 站点的脚本(编程不使用expect)。

 lftp
 lftp :~> set ssl-allow false
 lftp :~> set passive-mode yes
 lftp :~> open ftp.abc.com
 lftp ftp.abc.com:~> login theuser
 Password:
 lftp theuser@ftp.abc.com:~> cd
  `cd' at 0 [Delaying before reconnect: 26]
 CTRL-C
 lftp theuser@ftp.abc.com:~> debug
 lftp theuser@ftp.abc.com:~> cd
 ---- Connecting to ftp.abc.com (XX.XXX.XX.XX) port 21
 <--- 220-Welcome to the Yahoo! Web Hosting FTP server
 <--- 220-Need help? Get all details at:
 <--- 220-http://help.yahoo.com/help/us/webhosting/gftp/
 <--- 220-
 <--- 220-No anonymous logins accepted.
 <--- 220-Yahoo!
 <--- 220-Local time is now 15:30. Server port: 21.
 <--- 220-This is a private system - No anonymous login
 <--- 220 You will be disconnected after 5 minutes of inactivity.
 ---> FEAT
 <--- 211-Extensions supported:
 <---  EPRT
 <---  IDLE
 <---  MDTM
 <---  SIZE
 <---  MFMT
 <---  REST STREAM
 <---  MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
 <---  MLSD
 <---  XDBG
 <---  AUTH TLS
 <---  PBSZ
 <---  PROT
 <---  TVFS
 <---  ESTA
 <---  PASV
 <---  EPSV
 <---  SPSV
 <---  ESTP
 <--- 211 End.
 ---> OPTS MLST type;size;modify;UNIX.mode;UNIX.uid;UNIX.gid;
 <--- 200  MLST OPTS type;size;sizd;modify;UNIX.mode;UNIX.uid;UNIX.gid;unique;
 ---> USER theuser
 <--- 421 Sorry, cleartext sessions are not accepted on this server.
 Please reconnect using SSL/TLS security mechanisms.
4

8 回答 8

27

似乎 lftp 在许多系统上没有正确配置,这使得它无法验证服务器证书(生成Fatal error: Certificate verification: Not trusted)。

网络(以及本文中的答案)充满了通过完全禁用证书验证或加密来解决此问题的建议。这是不安全的,因为它允许中间人攻击被忽视。

更好的解决方案是正确配置证书验证,这很容易,幸运的是。为此,将以下行添加到/etc/lftp.conf(或者~/.lftp/rc,或~/.config/lftp/rc):

set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"

ca-certificates.crt是一个包含系统所有 CA 证书的文件。上面使用的位置是来自 Ubuntu 的位置,在不同的系统上可能会有所不同。要生成或更新文件,请运行update-ca-certificates

sudo update-ca-certificates

如果您的系统没有此命令,您可以像这样手动创建一个:

cat /etc/ssl/certs/*.pem | sudo tee /etc/ssl/certs/ca-certificates.crt > /dev/null
于 2017-05-21T10:23:28.233 回答
15

lftp :~> 设置 ssl-allow false

您已将 ssl-allow 显式设置为 false。但是如果 lftp 应该尝试使用 SSL,这必须是真的。

于 2014-05-28T05:04:48.597 回答
7

您可能还需要

set ssl:verify-certificate no
于 2014-12-09T05:26:26.540 回答
2

设置ftp:ssl-allow true对我不起作用。

通过键入set

lftp :~> set

我注意到了这一点:

set ftp:ssl-allow true
set ftp:ssl-allow/XXX.XXX.XXX.XXX no

以 XXX.XXX.XXX.XXX 作为服务器,我正在登录。

所以我需要的最后一组命令是:

lftp :~> set ftp:ssl-allow true
lftp :~> set ftp:ssl-allow/XXX.XXX.XXX.XXX true
lftp :~> set ssl:verify-certificate no
于 2016-01-28T14:03:23.407 回答
2
于 2021-01-17T12:01:51.797 回答
1

lftp 版本必须 >= 4.6.3(Debian 用户)

于 2016-07-16T08:23:44.850 回答
0

对于使用 lftp 的 FTPS 服务器连接(使用端口 990,但不必指定),这对我有用

代码: lftp ftps://USER:PASSWORD@server.com -c "set ssl:verify-certificate false;"

然后:做事

更多信息: how-to-avoid-lftp-certificate-verification-error

于 2019-07-21T11:22:20.813 回答
0

使用 lftp 一步一步对我有用的是什么:

  1. 获得主机证书openssl s_client -connect <ftp_hostname>:21 -starttls ftp,在结果开始时我得到了类似的东西-----BEGIN CERTIFICATE----- MIIEQzCCAyu.....XjMO -----END CERTIFICATE-----
  2. 将其复制-----BEGIN CERTIFICATE----- MIIEQzCCAyu.....XjMO -----END CERTIFICATE----- /etc/ssl/certs/ca-certificates.crt
  3. 进入lftp 配置参考这个证书文件添加到/etc/lftp.conf系统范围set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"
  4. 然后做你的同步或任何事情lftp,在我的情况下lftp -u "${FTP_USER},${FTP_PWD}" ${FTP_HOST} -e "set net:timeout 10;mirror ${EXCLUDES} -R ${LOCAL_SOURCE_PATH} ${REMOTE_DEST_PATH} ; quit"
于 2020-05-29T18:01:57.203 回答