SFTP(SSH文件传输协议)是一种安全的文件传输协议,它运行在SSH协议上,它支持SSH的完整安全性和身份验证功能。

SFTP已经几乎取代传统的FTP的文件传输协议,并正在迅速取代FTP/S,它提供了这些协议提供的所有功能,但更安全,更可靠,配置更简单,基本没有理由再使用传统协议。

SFTP还可以防止密码嗅探和中间人攻击,它使用加密和加密哈希函数保护数据的完整性,并对服务器和用户进行验证。

SFTP端口号

SFTP端口号是SSH端口22,它基本上只是一个SSH服务器,只有用户使用SSH登录服务器后才能启动SFTP协议,服务器上没有公开单独的SFTP端口,无需在防火墙中配置另一个漏洞。

适用于WINDOWS和MAC的SFTP客户端

  1. Tectia SSH Client
  2. WinSCP
  3. FileZilla
  4. PuTTY
  5. Cyberduck

适用于LINUX,WINDOWS和MAC的SFTP服务器

SFTP服务器通常作为SSH实现的一部分,大多数组织使用Tectia SSH或OpenSSH作为服务器,两者都带有的SFTP服务器实现。

  • Tectia SSH Server for Windows
  • Tectia SSH Server for IBM z/OS mainframes
  • OpenSSH - open source server for Linux & Unix
  • FileZilla - a free sftp server for Window

LINUX上的SCP命令

scp命令是Linux中SFTP的文件传输程序,scp通常还带有openssh包。

它的典型用途是:

 scp [-r] file ... [user@]host:[path]

这会将一个或多个文件复制到给定主机.
如果user给出,则将它们复制到主机上的该帐户。
如果未user提供,则假定与客户端上的用户名相同。
如果path给出,则将文件复制到该目录(相对于给定用户的主目录)。
如果没有path,则将文件复制到用户的主目录。
如果提供了该-r选项,则文件可以是目录,并且复制给定目录及其中的所有子目录和文件(递归)。

也可以反向复制:

 scp [-r] [user@]host:file path

通常,path是.,即当前目录

LINUX上的SFTP命令

sftp Linux中的命令是SFTP的客户端程序。该ftp命令行被设计为类似于FTP命令。该sftp命令通常是OpenSSH包的一部分。

SFTP协议

SFTP协议作为子系统在SSH协议上运行,它最初是由Tatu Ylonen在1997-1998中为SSH 2.0 设计的,没有单独的SFTP端口; 它使用普通的SSH端口。

该协议支持多个并发操作。每个操作由客户端分配的唯一编号标识,服务器响应包含相同的标识号。服务器可以异步处理请求,并可能无序返回响应。出于性能原因,文件传输客户端通常会在停止等待响应之前发送多个请求。

协议支持的操作或数据包类型包括:

INIT:将客户端版本号和扩展名发送到服务器

VERSION:返回客户端的服务器版本号和扩展名

OPEN:打开或创建文件,返回文件句柄

CLOSE:关闭文件句柄

READ:从文件中读取数据

WRITE:将数据写入文件

OPENDIR:打开一个目录进行读取,返回一个目录句柄

READDIR:从目录句柄中读取文件名和属性

MKDIR:创建一个目录

RMDIR:删除目录

删除:删除文件

RENAME:重命名文件

STAT:在符号链接后返回给定路径的文件属性

LSTAT:返回给定路径的文件属性,不遵循符号链接

FSTAT:给定文件句柄返回文件属性

SETSTAT:修改给定路径的文件属性

FSETSTAT:在给定文件句柄的情况下修改文件属性

READLINK:读取符号链接的值

SYMLINK:创建符号链接

REALPATH:规范化绝对路径的服务器大小相对路径

服务器返回以下响应数据包:

STATUS:表示操作成功或失败

HANDLE:成功返回文件句柄

DATA:成功返回数据

ATTRS:成功返回文件属性

还有一个针对任意特定于供应商的扩展的扩展机制。支持的扩展使用INIT和VERSION数据包进行协商。

EXTENDED:从客户端向服务器发送特定于供应商的请求

EXTENDED_REPLY:从服务器向客户端发送特定于供应商的响应。

SFTP与FTPS
人们经常想要比较SFTP和FTPS。FTPS基本上是通过SSL(安全套接字层)或TLS(传输层安全性)运行的旧ftp协议。

SFTP优于SFTP的优点包括:

SFTP在标准SSH端口上通过SSH运行。因此,不需要在服务器上打开其他端口,也不需要维护其他身份验证。这简化了配置并降低了配置错误的可能性。
FTPS需要复杂的防火墙配置,可能无法通过NAT工作。端口989和990需要打开。此外,FTPS支持主动和被动模式(参见FTP),这进一步使防火墙配置复杂化并且容易出现问题。
FTPS需要服务器的X.509证书,通常来自公共证书颁发机构。SSH无需任何集中式基础架构即可 SFTP可以利用SSH使用的任何主机密钥分发或认证方法,无需额外的工作和持续的维护。
FTPS基本上是FTP,这意味着它具有ASCII模式,如果模式设置不正确,可能会破坏文件。某些实现默认为ASCII模式。
FTPS不能用作文件系统。(这不会提高安全性,因为它仍然可以读取相同的文件。)
FTPS需要安装和修补额外的服务器软件包,而SFTP通常随系统附带SSH。

sftp 命令实例:

linux命令:sftp -s "sudo /usr/lib/sftp-server" user@host user@host /usr/lib/sftp-server" "sudo -s sftp sftp -s "sudo /usr/lib/sftp-server" user@hostrootopen.com
linux命令:sftp -s "sudo /usr/lib/sftp-server" user@host user@host /usr/lib/sftp-server" "sudo -s sftp sftp -s "sudo /usr/lib/sftp-server" user@hostrootopen.com
2018-01-14 01:38:48

linux命令:sftp -oPort=3476 user@host user@host -oPort=3476 sftp sftp -oPort=3476 user@hostrootopen.com
linux命令:sftp -oPort=3476 user@host user@host -oPort=3476 sftp sftp -oPort=3476 user@hostrootopen.com
2018-02-28 12:32:48

linux命令:sftp-cp() { for each in "$@"; do echo "put \"$each\" \".$each\""; echo "rename \".$each\" \"$each\""; done }; }; done \"$each\""; \".$each\" "rename echo \".$each\""; \"$each\" "put echo do "$@"; in each for { sftp-cp() sftp-cp() { for each in "$@"; do echo "put \"$each\" \".$each\""; echo "rename \".$each\" \"$each\""; done };rootopen.com
linux命令:sftp-cp() { for each in "$@"; do echo "put \"$each\" \".$each\""; echo "rename \".$each\" \"$each\""; done }; }; done \"$each\""; \".$each\" "rename echo \".$each\""; \"$each\" "put echo do "$@"; in each for { sftp-cp() sftp-cp() { for each in "$@"; do echo "put \"$each\" \".$each\""; echo "rename \".$each\" \"$each\""; done };rootopen.com
2018-02-07 01:50:48

linux命令:sftp -p port user@host user@host port -p sftp sftp -p port user@hostrootopen.com
linux命令:sftp -p port user@host user@host port -p sftp sftp -p port user@hostrootopen.com
2018-01-02 04:02:48

Linux的Bash命令行(A-Z排序)