it-swarm.cn

SFTP,SCP和FISH协议之间有什么区别?

我曾经认为SCP是通过SSH复制文件的工具,而通过SSH复制文件的方式称为SFTP,它本身就是FISH的同义词。

但是现在,当我在寻找Windows中的Total Commander插件来执行此操作时,我注意到它的页面上显示“允许通过安全FTP(通过SSH的FTP)访问远程服务器。需要SSH2。这是不一样的作为SCP!”。

如果不一样,那我会误会什么?

67
Ivan

[〜#〜] sftp [〜#〜] 不是ssh上的FTP协议,而是SSH2(和某些SSH1实现)中包含的SSH协议的扩展。 SFTP是类似于FTP的文件传输协议,但使用SSH协议作为网络协议(并受益于SSH处理身份验证和加密)。

SCP仅用于传输文件,不能做其他事情,例如列出远程目录或删除文件,SFTP可以做到。

FISH似乎是 还有另一个协议 ,可以使用SSH或RSH传输文件。

63
jsbillings

SSH协议创建了一个安全隧道,通过该隧道可以传输双向流,并且可以使用该流连接所需的任何两个进程。

最熟悉的两个过程是Shell(在服务器上)和交互式终端仿真器(在客户端上)。这就是在SSH到服务器并在远程命令行管理程序的提示符下键入命令时所使用的。

[〜#〜] scp [〜#〜]是仅使用该Shell和远程命令进行的文件传输。在SCP中,一旦客户端连接到服务器,并且所有身份验证和授权都已完成,客户端就会向远程Shell发送类似scp -f myfile.txt,它仅将文件myfile.txt的内容写入流(供客户端读取)或scp -t myfile.txt从流中读取并写入myfile.txt。

您会注意到-f和-t(用于“从”和“到”)不在scp联机帮助页中。它们被认为是内部的。有一个轻量级的确认方案,以及一种通过将文件内容包装在简单的标头中来传输目录的方案。但是在大多数情况下,SCP是将文件的字节写入SSH隧道的基本问题,让SSH处理诸如压缩和完整性之类的复杂问题。

[〜#〜] sftp [〜#〜]是一种更为复杂的文件传输协议,该协议再次通过SSH进行隧道传输。

在SFTP中,请求和响应都是二进制编码的数据包,它们的名称分别为“ SSH_FXP_OPEN”,“ SSH_FXP_STAT”,“ SSH_FXP_READ”,“ SSH_FXP_DATA”,“ SSH_FXP_CLOSE”。

该协议的一个有趣特征是命令可以流水线化,并且响应可以以任何顺序进行。这可能意味着会话花在等待响应上的时间更少,并且有机会优化来自具有不同速度数据源的一台服务器的并发传输-尽管我不知道这些机会被利用到什么程度。

SFTP具有执行SCP不能处理的许多功能的命令。如删除,重命名,截断,移动等。

所有详细信息都位于 IETF草案 中。

值得注意的是,较新的SSH软件包用指向SFTP二进制文件的符号链接替换了用户scp二进制文件。该SFTP具有scp的外观,但在幕后它使用的是SFTP协议。

引用-O'ReillySSH:安全外壳,权威指南,第5.7节“子系统”:

警告:请勿从sshd2_config中删除subsystem-sftp行:scp2和sftp必须工作。在内部,两个程序都运行ssh2 -s sftp来执行文件传输。

是一段有趣的历史。假设您想通过SSH传输文件,但是您的远程系统没有SCP。或者,也许您想执行比SCP更复杂的文件操作,但是您的远程系统没有SFTP。如今,这两种情况都不大可能,但是当发明了Fish时,它们就是了。

因此,客户端Midnight Commander的开发人员着手创建自己的解决方案。它在原理上类似于scp,但是有更多命令。客户端发送如下命令:

 #RETR /some/name
 ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'

如果您正在与Fish服务器通讯,则它将解释#RETR命令。但是,如果远程服务器未安装Fish服务器,则命令行管理程序将解释命令。首先是注释,然后是打印文件信息的命令,然后是文件内容,并在某些标记中括起来。

实际上,在没有scp或fish的情况下,客户端已经“滚动了自己的” scp等效项-但它可以同样发送Shell命令来重命名,移动,截断等。

Fish的详细信息位于Midnight Commander来源 此处

从最终用户的角度来看,这一切意味着什么?

  • 较旧的SSH服务器实现支持scp,但不支持SFTP;您不能将SFTP客户端与这些
  • 使用SFTP获得性能,可靠性和灵活性
  • 您的“ scp”客户端可能是伪装的SFTP客户端(需要引用
  • 在小众环境下,Fish可能会有用,但在其他方面则使用更标准的SFTP。
34
slim

简单地说:

SFTP = SSH + SFTP-server on server
SCP  = SSH + `scp` on server side
FISH = SSH + `dd` (and some other basic Unix utilities on the server side only) 
21
c2h2

FISH和SFTP相似,并且观察到两者都可以通过SSH进行工作,SFTP需要在SSH服务器中提供特定的支持和配置以促进传输,但是它更加安全,并且允许SysAdmins仅允许SFTP(在这种情况下,FISH赢得了不起作用)。

FISH需要外壳程序(例如,sh/rsh)进行复制,因此需要对计算机的完全SSH访问,我想这很难保护(我从来没有必要对此客观地发表评论)。

如果可能的话,我建议使用SFTP,scp,FISH(按此顺序)。

维基百科FISH文章

11
N J