SCP 和 SFTP 有什么区别?

nos*_*nos 176 ssh file-transfer scp sftp

通常,我使用scp命令在 *nixes 上传输文件。

SFTP 和 SCP 有什么区别?他们不是都在 SSH 上工作吗?

Ale*_*lex 110

简而言之,SCP 只能用于传输文件,并且它是非交互的(即,所有内容都必须在命令行中指定)。SFTP 更复杂,并且允许交互式命令执行诸如创建目录、删除目录和文件(当然都受系统权限)等操作。

  • 关于交互性:您描述的不同之处在于 OpenSSH 中实现的特定 SFTP/SCP 客户端。这与协议本身无关。完全可以实现交互式 SCP 客户端或非交互式 SFTP 客户端。 (38认同)
  • 还有一件事:如果服务器只允许通过 `ForceCommand internal-sftp` 行进行 SFTP 访问,则 scp 不起作用。我认为 `PermitTTY no` 也可以阻止 scp 访问,但允许 sftp 访问,尽管我每次尝试都可能输错密码。但是这两件事不应该阻止 sftp。来源:个人经验。 (5认同)
  • 将来,尽管有“ForceCommand inside-sftp”,“scp”仍可以通过 ssh 访问文件,因为这里正在进行一些工作:https://github.com/openssh/openssh-portable/pull/194 这将解决@ecube 提到的问题。 (3认同)

Jar*_*vin 107

来自维基百科

与早期只允许文件传输的 SCP 协议相比,SFTP 协议允许对远程文件进行一系列操作——它更像是一种远程文件系统协议。与 SCP 客户端相比,SFTP 客户端的额外功能包括恢复中断的传输、目录列表和远程文件删除。[1] 由于这些原因,与 GUI SCP 客户端相比,实现 GUI SFTP 客户端相对简单。

尽管 SCP 和 SFTP 在文件传输期间使用相同的 SSH 加密,并且具有相同的一般开销级别,但在传输文件时,SCP 通常比 SFTP 快得多,尤其是在高延迟网络上。发生这种情况是因为 SCP 实现了一种更有效的传输算法,该算法不需要等待数据包确认。这会带来更快的速度,但代价是无法中断传输,因此与 SFTP 不同,SCP 传输无法在不终止会话的情况下取消。

  • “在传输文件方面,SCP 通常比 SFTP 快得多。” (19认同)
  • “但代价是无法中断传输”。这是一个非常重要的权衡。 (4认同)

小智 13

从纯粹的命令行角度来看:

  • scp没有交互模式,也不能读取命令脚本,这意味着一切都必须写在命令行上。
  • sftp具有交互模式,可以从文件中读取命令。

这两个命令之间的另一个重要区别是sftp无法使用单个命令行将本地文件放到远程位置,尽管它可以获取远程文件,而scp可以同时执行

sftp 获取远程文件

sftp user@host:/path/to/remote.file [/path/to/local.file]
Run Code Online (Sandbox Code Playgroud)

scp 获取远程文件

scp user@host:/path/to/remote.file [/path/to/local.file]
Run Code Online (Sandbox Code Playgroud)

scp 放置远程文件

scp /path/to/local.file user@host:[/path/to/remote.file]
Run Code Online (Sandbox Code Playgroud)

  • 放入文件:`sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'` (5认同)

Pre*_*raj 5

SSH ( Secure SHell ) 是一种加密网络协议,允许远程登录和其他网络服务在不安全的网络上安全运行。

区别: SFTP工作在交互模式(会话),SCP工作在非交互模式。使用SFTP,我们可以访问远程文件系统,即创建、删除和列出文件。

相似之处: SCP(安全复制协议)和SFTP SSH文件传输协议)都是网络协议支持网络上主机之间的文件管理两者都使用 SSH。

更多的


Per*_*ere 5

这两个协议的大多数差异已经在其他答案中说明过,并且在https://unix.stackexchange.com/q/8707/19088中更详细地说明了

根据curl的文档,另一个区别是SCP协议的可移植性不太好,通常只能在Unix系统之间工作。

顺便说一下,curl实现了这两种协议,并且与默认的 OpenSSH SFTP 客户端实现不同,它对于 SFTP 和 SCP都是非交互式的。

请注意,还有FISH协议,它允许您通过 SSH 传输文件,而不需要 SCP 或 SFTP。据我所知,FISH 并不是很流行,目前只有少数文件管理器(Midnight Commander和一些基于 KDE 的)和Lftp实现。

  • “根据curl的文档,另一个区别是SCP协议的可移植性不太好,通常只能在Unix系统之间工作。”您的这部分答案具有讽刺意味的是,最流行的 SCP GUI 称为 WinSCP,并且 - 您已经猜到了 - 它是一个 Windows 程序。 (3认同)
  • @brett 最流行的客户端可能是 OpenSSH 的 scp,我想说它是高度部署的。 WinSCP 是一个 SCP/SFTP/etc 客户端,但现在主要用作 (S)FTP 客户端:“2003 年 6 月发布了 3.0 版,引入了对 SCP 替代方案(SFTP 协议)的支持。随着时间的推移,它从替代方案演变而来到主要协议。尽管如此,行之有效的名称“WinSCP”仍被保留。” (来自 WinSCP 的历史:winscp.net/eng/docs/project_history) (2认同)