SFTP和“FTP over SSH”的区别

在C#SSH文件传输协议(SFTP)中查找SFTP客户端时,我遇到了这两个合适的项目 – 一个和两个 。

在试图理解基础知识的同时,我遇到了这个令人困惑的维基百科文章 。 通过SSH的SFTP和FTP有什么区别? 如果图书馆不同意,似乎没有图书馆支持“通过SSH的FTP”。

以下是区别:

  • SFTP (SSH文件传输协议)是一种提供文件传输和操作function的协议。 它可以处理任何可靠的数据stream,但通常与SSH一起使用
  • “通过SSH的FTP”使用常规的旧FTP协议,但在客户端和服务器之间放置了一个SSH隧道 。

您可能不会find“FTP over SSH”的库,因为通常是通过运行SSH命令来build立隧道,一旦build立了隧道,客户端和服务器就不需要了解隧道; 他们只是打开端口和传输数据的方式,他们会没有隧道。

顺便说一句,你的另一个select可能是FTP over SSL(FTPS) ,它支持.NET。 (请参阅http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.enablessl.aspx 。)

基本上,有以下文件传输协议:

  • FTP – 自20世纪70年代以来一直存在的普通的旧FTP协议。 首字母缩写词代表“文件传输协议”。 它通常运行在TCP端口21上。

  • SFTP – 另一种与FTP完全不同的文件传输协议。 SFTP通常运行在SSH会话上,通常在TCP端口22上。自从20世纪90年代后期以来,SFTP一直在运行。 首字母缩写词实际上代表“SSH文件传输协议”。

  • 基于SSH的FTP – 1)可能的,但是通过SSH通道隧道传输的FTP协议极其罕见的例子2)错误地命名为SFTP

(有关详细信息,请参阅Rebex上的 “ Secure FTP,FTP / SSL,SFTP,FTPS,FTP,SCP …有什么区别?

免责声明:我为Rebex工作

实际上SFTP是通过SSH运行的另一种协议 – 如果你喜欢,可以使用SSH的扩展。 人们倾向于使用SFTP,而不是通过SSH隧道传输FTP。

为了在.NET中提供全面的SFTP支持,请尝试edtFTPnet / PRO 。 支持许多不同的SFTP服务器已经有很长一段时间了。

SFTP是它自己的协议。 一旦通过SSH连接,SSH上的FTP就使用FTP。

基于SSH的FTP是通过SSH隧道传输的普通FTP协议。 SFTP是SSH提供的文件传输机制,它是完全不同的协议。 我还没有看到任何人通过SSH使用FTP。

  • SFTP代表SSH文件传输协议。 这不是通过SSL的FTP,而是通过SSH的FTP。 SFTP在RFC 4253中进行了标准化。
  • FTP代表由RFC 959定义的文件传输协议(File Transfer Protocol)。 FTP非常受欢迎,但并不安全。 因此引入了FTP over SSL,称为FTPS或FTP / SSL。

对于身份validation,SFTP使用SSH密钥,而FTPS使用X.509证书。

我已经使用了SharpSSH多年,并且效果很好。 尽pipe在一段时间内没有看到任何发展,但源代码易于理解和使用。 我已经做了一些调整,并且在没有任何问题的情况下为我自己的项目进行了重新编译,尽pipe它可以正常工作,而不需要任何这些工作。

如果你不需要做任何事情,你也可以使用非常简单的代码为PuTTY的PSFTP.EXE客户端编写自己的.NET包装器。

尽pipe我从来没有使用过格雷格·芬瑟(Greg Finzer)的SFTP库,但是我个人认识他,并且坚信,如果你需要一些积极发展和强大的东西,他会有一个优质的产品。 但对于简单的东西,我已经用我提到的免费选项取得了巨大的成功。

我刚刚创build了一个.NET SFTP库 。 我在这个过程中学到的东西之一就是不同的FTP到SFTP。 实际上,您正在使用SSH服务器而不是FTP服务器进行通信。 这不仅仅是协议,你发送到SSH服务器的命令是完全不同的。

这是一个链接到我的图书馆。