【问题标题】:How do I get lftp to use SSL/TLS security mechanism from the command line?如何让 lftp 从命令行使用 SSL/TLS 安全机制?
【发布时间】:2014-05-27 22:35:52
【问题描述】:

我正在尝试登录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.

【问题讨论】:

    标签: ubuntu ftp ftps lftp


    【解决方案1】:

    似乎许多系统上的 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
    

    【讨论】:

    • 备注:对我来说(lftp 4.7.4,GnuTLS 3.6.1)中间证书不是从网络上检索的,所以我必须下载它们并手动添加它们(验证后!)到 / usr/share/ca-certificates.
    • 你检查你的发行版是否有一个包吗?安装 CA 证书可能像 sudo apt-get install ca-certificates 一样简单(Ubuntu 上的示例)。
    • 是的,版本 20161130 和版本 20180409 都不包含所需的证书。 dpkg -l ca-certificates -> ii ca-certificate 20180409 所有通用 CA 证书
    • 缺少的证书有:1) COMODO RSA Extended Validation Secure Server CA 和 2) COMODO RSA Domain Validation Secure Server CA
    • 嗨,我正在尝试从 gitlab 共享运行器建立安全的 ftp 连接。所以,我真的无法访问“本地”文件夹,服务器确实有 SSL 证书,但我看不到获取它的方法。你能帮我解决这个问题吗?
    【解决方案2】:

    lftp :~> 设置 ssl-allow false

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

    【讨论】:

    • 谢谢。这让我通过了 SSL/TLS 错误,并进入下一条消息:Certificate verification: Not trusted。所以我使用了set ssl:verify-certificate false,但后来我得到了cd: Login failed: 530 Login authentication failed,我知道登录凭据是正确的(一切都适用于Filezilla)。命令行上的lftp 是一种锻炼...如果需要,我将开始一个新问题。
    • 您确定在 FileZilla 中使用 FTPS(带有 FTP 的 SSL)而不是 SFTP(通过 SSH 传输文件)吗?它们都受支持,但由于名称相似而经常混淆。
    • 根据设置此站点的机构,它是 FTPS。与 FileZilla 的连接只有在设置为 FTP 和Require explicit FTP over TLS 时才有效。使用 SFTP 设置将无法正常工作。似乎他们在 yahoo webhosting 上托管该网站。我们确实要求提供 SFTP 位置,我们已准备好 expect 脚本。
    【解决方案3】:

    你可能还需要

    set ssl:verify-certificate no
    

    【讨论】:

    • 这是不安全!有关详细信息和更好的解决方案,请参阅my answer
    • 至少,您可以使用set ssl:verify-certificate/myserver.com nomyserver.com 替换为您尝试连接的服务器的实际名称。
    【解决方案4】:

    设置 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
    

    【讨论】:

    • 我意识到这个线程很旧,但是添加最后一行不会否定前两行添加的安全性吗?我很困惑。
    • @GrouchyGaijin - 关于安全性,您可能是对的。但是,我并不担心。我唯一的首要任务是让该死的连接工作。这有效:-)
    • 我感觉到你的痛苦兄弟。
    • 实际上,你失去了对中间人攻击和类似攻击的保护,但你仍然可以防止随机的人听。做一个中间人比做一个简单的 tcpdump 需要更多的兴趣。
    【解决方案5】:

    我的回答是为您系统上的单个用户提供访问权限,而不是系统范围的证书。

    lftp 使用传输层安全 (TLS)。所以必须先从 FTP 服务器上获取证书。

    openssl s_client -connect <ftp-hostname>:21 -starttls ftp
    

    我将整个证书链包含在一个名为 cert.crt 的新文件中,该文件位于我的本地 ~/.lftp 文件夹中。至少,您希望包含证书本身的所有文本: -----BEGIN CERTIFICATE----- &lt;...&gt; -----END CERTIFICATE-----

    • 我在本地 ~/.lftp 文件夹中创建了一个名为 rc 的文件并添加了这些行
      • set ssl:ca-file “cert.crt”
      • set ssl:check-hostname no(这可以防止 Fatal error: Certificate verification: certificate common name doesn't match requested host name ‘&lt;ftp-hostname&gt;’ 在远程运行像 ls 这样的命令时)

    【讨论】:

    • 谢谢!我想知道如何为特定证书添加排除项,就是这样。
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

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

      然后: 做事

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

      【讨论】:

        【解决方案8】:

        使用 lftp 一步一步对我有用:

        1. get certificate of host with openssl s_client -connect &lt;ftp_hostname&gt;: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"

        【讨论】:

          猜你喜欢
          • 2010-10-22
          • 2012-08-25
          • 1970-01-01
          • 2017-09-18
          • 2015-02-22
          • 1970-01-01
          • 2015-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多