来自维基百科:
与早期的SCP协议(只允许文件传输)相比,SFTP协议允许对远程文件进行一系列操作–它更像一个远程文件系统协议。与SCP客户端相比,SFTP客户端的额外功能包括恢复中断的传输、目录列表和远程文件删除。[1]由于这些原因,与GUI SCP客户端相比,实现GUI SFTP客户端相对简单。
和
尽管SCP和SFTP在文件传输过程中都利用了相同的SSH加密,开销也是一样的,但SCP在传输文件方面通常比SFTP快得多,特别是在高延迟网络上。这是因为SCP实现了一种更有效的传输算法,不需要等待数据包确认。这导致了更快的速度,但代价是不能中断传输,所以与SFTP不同,SCP传输不能在不终止会话的情况下取消。
从纯命令行的角度来看:
这两个命令之间的另一个重要区别是,sftp虽然可以获取远程文件,但不能用一个命令行把本地文件放到远程位置,而scp可以做到这两点。
sftp user@host:/path/to/remote.file [/path/to/local.file]
scp user@host:/path/to/remote.file [/path/to/local.file]
scp /path/to/local.file user@host:[/path/to/remote.file]
``` 。
两种协议的大部分区别已经在其他答案中说过了,在 https://unix.stackexchange.com/q/8707/19088
根据 curl 的文档,另一个区别是 SCP 协议的可移植性不强,通常只在 Unix 系统之间工作。
顺便说一下, curl 同时实现了这两种协议,而且与默认的OpenSSH SFTP客户端实现不同,它对SFTP和SCP都是**不交互的。
还要注意的是,还有 FISH 协议,它允许你通过SSH传输文件,而不需要SCP或SFTP。据我所知,FISH还不是很流行,目前只有少数几个文件管理器 Midnight Commander 和一些基于KDE的文件管理器)和 Lftp 实现。