"ASCII" 模式下的 SFTP 上传

SFTP Upload in "ASCII" Mode

我有一个简单的文本文件,我正在使用 SFTP(客户端:FireFTP)从 windows 平台上传到 Unix 服务器。我注意到当使用 SFTP 而不是普通 FTP 上传时,文件被强制以 "Binary" 模式而不是 "ASCII" 模式上传。

有人知道强制转移方法背后的原因吗?通常这无关紧要,但我正在服务器上解析此文件(一个字符一个字符),并且在 "Binary" 中上传时留在文件上的挂起的 ^M 导致我的解析器出现问题。

是的,我正在更改解析器来处理这个问题,但是,我主要感兴趣的是为什么 SFTP 强制上传发生在 "binary" 而不是“ASCII?

是否是我不理解的安全漏洞?

这是否与客户端使用的 SFTP 协议版本有关(在本例中为 FireFTP)?

编辑:

如果 "ASCII" 不再是现代 SFTP 的选项,那么当从 Windows -> Unix 传输文件时,您将 "accepted"在以前包含标准 Windows(CRLF)?

的 Unix 服务器上的整个文件中剩余额外的 CR (^M)

感谢指导

FTP != SFTP。这是您应该注意的最重要的事情。

而ASCII模式只是一个古老的废话。在非常现代的 SFTP 中没有这样的东西,它只是按原样传输字节(没有理由以其他方式进行)。

规范Firezilla wiki has a page on technical specifications. The most widely implemented version of the SFTP spec is version 3 draft 2. Notably, the Openssh SFTP client and server implement that version

SFTP 协议的第 3 版没有与 FTP 的 ASCII 传输模式等效的功能。它总是逐字传输文件。

SFTP 协议的更高版本支持转换行终止符的传输模式。假设您可以找到支持该功能的客户端和服务器。

Is this a matter of what SFTP protocol version the client is using...?

我不知道 FireFTP 的能力。但是 OpenSSH SFTP 服务器不支持类似 ASCII 的传输模式。

is it simply "accepted" that when transferring a file from Windows -> Unix that you will have the additional CR (^M) leftover...

有多种方法可以解决这个问题。有一些程序可以将一种格式转换为另一种格式。某些读取文本文件的程序可以容忍任何一种格式的行终止符。

SFTP 协议有多个版本 (1-6),其中版本 3 最受欢迎。 ASCII 模式已添加到协议的版本 4 中。

在我们的 SecureBlackbox 产品中,如果已使用协议版本 3 或更低版本协商连接,我们将模拟 ASCII 模式,但此类模拟需要您知道远程服务器的 OS(或行尾)。此外,ASCII 模式使实现所谓的 SFTP 请求流水线变得更加困难,该功能使 SFTP 传输速度更快。