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

SFTP和SCP有什么区别?它们都不都可以在SSH上运行吗?

#1 楼

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

评论


关于交互性:您所描述的区别在于OpenSSH中实现的特定SFTP / SCP客户端。与协议本身无关。完全有可能实现交互式SCP客户端或非交互式SFTP客户端。

–马丁·普里克里(Martin Prikryl)
14-10-8在6:06



还有一件事:如果服务器仅允许通过ForceCommand internal-sftp行进行SFTP访问,则scp不起作用。我认为PermitTTY no也可以阻止scp访问,但允许sftp访问,尽管我每次尝试输入密码时都会输入错误。但是这两件事不应该阻止sftp。资料来源:个人经验。

–ecube
16-10-10在7:27

我是否可以假定任何SFTP服务器也能够接受SCP传输?

–gus
17年4月25日在8:00

@gus否,请参阅ecube的评论

–佩雷
17年8月13日在18:30

将来,尽管有ForceCommand内部sftp,scp仍可以通过ssh访问文件,因为这里有一些工作要做:github.com/openssh/openssh-portable/pull/194这将解决@ecube提到的问题。

– Rob W
20-10-11在18:26

#2 楼

来自Wikipedia:


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



/>

尽管SCP和SFTP在文件传输过程中都使用了相同的SSH加密
,并且具有相同的一般开销
,但是SCP通常很多
传输文件的速度比SFTP快,尤其是在高延迟
网络上。发生这种情况是因为SCP
实现了一种更高效的transfer
算法,该算法不需要
等待数据包确认。这
导致速度更快,但以
不能中断传输为代价,因此与SFTP不同,SCP
传输不能在不终止的情况下被取消
会议。


评论


“在传输文件时,SCP通常比SFTP快得多。”

–米卡·波伦(Micah Bolen)
13年10月4日在10:35

“但是以无法中断传输为代价”。这是一个非常重要的权衡。

–aaaaaa
16年6月25日在1:42

aaaaaa,“不终止会话”,如果所有会话都用于复制文件,这没什么大不了的。如果要复制大量文件,客户端也可以等待单个文件复制完成。

– Victor Sergienko
19-09-18在18:56

#3 楼

从纯命令行的角度来看:



scp没有交互模式,也无法读取命令脚本,这意味着所有内容都必须写在命令行上。 br />
sftp具有交互模式,可以从文件中读取命令。

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

sftp获取远程文件

sftp user@host:/path/to/remote.file [/path/to/local.file]



scp user@host:/path/to/remote.file [/path/to/local.file]


scp放置远程文件

scp /path/to/local.file user@host:[/path/to/remote.file]


评论


放置文件:sftp {user} @ {host}:{remote_dir} <<< $'put {local_file_path}'

–gdw2
19年4月18日在17:16

#4 楼

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

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

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

更多

#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程序。

–brett
18-2-26在18:11

@brett最受欢迎的客户端可能是OpenSSH的scp,我想说它是高度部署的。 WinSCP是一个SCP / SFTP / etc客户端,但如今主要用作(S)FTP客户端:“ 2003年6月发布了3.0版,引入了对SFTP协议SCP替代的支持。随着时间的推移,它从替代FTP演变而来。到主要协议。尽管如此,仍保留了公认的名称“ WinSCP”。” (摘自WinSCP的历史记录:winscp.net/eng/docs/project_history)

–佩雷
18-2-26在21:39