Iva*_*van 83 ssh scp sftp fish-protocol
以前觉得SCP是SSH复制文件的工具,SSH复制文件叫做SFTP,本身就是FISH的同义词。
但是现在,当我在 Windows 中寻找 Total Commander 插件来执行此操作时,我注意到它的页面上显示“允许通过安全 FTP 访问远程服务器(通过 SSH 的 FTP)。需要 SSH2。这不一样作为SCP!”。
如果它不一样,那么我误解了什么?
jsb*_*ngs 83
SFTP不是基于 ssh 的 FTP 协议,而是 SSH2(以及一些 SSH1 实现)中包含的 SSH 协议的扩展。SFTP 是一种类似于 FTP 的文件传输协议,但使用 SSH 协议作为网络协议(并受益于让 SSH 处理身份验证和加密)。
SCP 仅用于传输文件,不能执行其他操作,例如列出远程目录或删除文件,而 SFTP 可以执行这些操作。
FISH 似乎是另一种可以使用 SSH 或 RSH 传输文件的协议。
更新 (2021/03/09):根据OpenSSH 8.0/8.0p1 (2019-04-17)的发行说明:
的SCP协议是过时的,不灵活和不容易固定。我们建议使用更现代的协议,如 sftp 和 rsync 来代替文件传输。
sli*_*lim 45
SSH 协议创建了一个安全隧道,您可以通过它传输双向流,并且您可以使用该流连接您喜欢的任何两个进程。
最熟悉的两个进程是 shell(在服务器上)和交互式终端模拟器(在客户端)。当您通过 ssh 连接到服务器并在远程 shell 的提示符下键入命令时,这就是您所使用的。
SCP是仅使用该 shell 和远程命令完成的文件传输。在 SCP 中,一旦客户端连接到服务器,并且所有身份验证和授权都已完成,客户端会向远程 shell 发送一个类似 的命令scp -f myfile.txt,该命令只是将文件 myfile.txt 的内容写入流(对于客户端读取)或scp -t myfile.txt从流中读取并写入 myfile.txt。
您会注意到 -f 和 -t(用于“from”和“to”)不在 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 软件包scp使用指向 SFTP 二进制文件的符号链接替换了用户二进制文件。这个 SFTP 具有 scp 的外观和感觉,但在幕后它使用 SFTP 协议。
引文——O'Reilly SSH:安全外壳,权威指南,第 5.7 节“子系统”:
警告:不要从 sshd2_config 中删除子系统 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'
Run Code Online (Sandbox Code Playgroud)
如果您正在与 Fish 服务器通话,那么它会解释该#RETR命令。但是,如果远程服务器没有安装 Fish 服务器,命令将由 shell 解释。首先是注释,然后是打印有关文件的信息的命令,然后是用一些标记包围的文件内容。
实际上,在服务器上没有 scp 或 Fish 的情况下,客户端使用 shell 命令“滚动了自己的”scp 等效项 - 但它同样可以发送 shell 命令来重命名、移动、截断等。
鱼的详细信息在此处的午夜指挥官源中。
从最终用户的角度来看,这一切意味着什么?
c2h*_*2h2 23
简单说一下:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98628 次 |
| 最近记录: |