SFTP是一种安全文件传输协议,用于通过加密的SSH传输访问,管理和传输文件。 与传统的FTP协议相比,SFTP提供了FTP的所有功能,并且更易于配置。本文以CentOS 7.9操作系统为例,介绍配置SFTP、使用SFTP上传、下载文件和文件夹的操作步骤。

操作步骤

  1. 以root用户登录云服务器。
    具体操作,请参见 连接方式概述
  2. 执行以下命令,查看OpenSSH版本。
    ssh -V
    回显信息如下所示。
    OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
    如果OpenSSH版本低于4.8p1,需执行以下命令,升级OpenSSH。
    yum update -y openssh-server
  3. 配置SFTP。
    1. 执行以下命令,创建用户组。
      本示例中用户组为 sftp
      groupadd sftp
    2. 执行以下命令,创建用户并加入到用户组sftp中,同时设置用户密码。
      本示例用户名为 sftpuser
      useradd -g sftp -s /sbin/nologin sftpuser
      passwd sftpuser
      运行命令后,根据命令行提示设置 sftpuser用户的密码,回显信息类似如下所示。
      [root@iZbp1702ydmde0jkav7**** ~]# useradd -g sftp -s /sbin/nologin sftpuser
      [root@iZbp1702ydmde0jkav7**** ~]# passwd sftpuser
      Changing password for user sftpuser.
      New password: 
      Retype new password: 
      passwd: all authentication tokens updated successfully.
      说明 如果已创建用户,但是用户不在创建的用户组 sftp中,运行命令 usermod -g sftp 用户名 移动用户到用户组中。
    3. 执行以下命令,更改属主和权限。
      chown root:sftp /home/sftpuser
      chmod 755 /home/sftpuser
    4. 执行以下命令,创建文件目录供用户sftpuser上传和下载文件。
      本示例创建文件目录为 /home/sftpuser/test
      mkdir /home/sftpuser/test
    5. 依次执行以下命令,修改文件目录的拥有者和权限。
      chown -R sftpuser:sftp /home/sftpuser/test
      chmod -R 755 /home/sftpuser/test
    6. 执行以下命令,配置sshd_config文件。
      vim /etc/ssh/sshd_config
      i进入编辑模式,注释掉如下信息。
      #Subsystem sftp /usr/libexec/openssh/sftp-server
      在文件末尾添加如下内容:
      Subsystem sftp internal-sftp     #指定使用sftp服务使用系统自带的internal-sftp
      Match Group sftp     #限定只有sftp组的用户才能访问
      ChrootDirectory /home/sftpuser   #设定属于用户组sftp的用户访问的根目录,需根据实际替换根目录
      ForceCommand internal-sftp   #指定sftp命令
      AllowTcpForwarding no   #禁止允许TCP转发
      X11Forwarding no    #禁止X11转发
      配置如下图所示。 asdEcs,输入 :wq并按 Enter保存并关闭配置文件。
    7. 执行以下命令,重启sshd服务。
      systemctl restart sshd
  4. 使用SFTP上传、下载文件或文件夹。
    1. 在本地主机执行以下命令,远程连接到云服务器。
      sftp -oPort=22 用户名@IP地址
      本示例中,用户名为 sftpuser,云服务器ECS的公网IP地址为47.99.XX.XX,示例命令如下:
      sftp -oPort=22 sftpuser@47.99.XX.XX
      连接成功后,您可以使用交互式sftp命令。
      [root@iZuf695wuq3hiktop63**** ~]# sftp -oPort=22 sftpuser@47.99.XX.XX
      sftpuser@47.99.XX.XX's password:
      Connected to 47.99.XX.XX.
      sftp>
      sftp命令示例如下:
      sftp> pwd     #查看远程云服务器的当前目录
      Remote working directory: /
      sftp> lpwd    #查看本地云服务器的当前目录
      Local working directory: /root
      sftp> ls      #查看远程云服务器的当前目录下的文件或文件夹
      test
      sftp> lls     #查看本地云服务器的的当前目录下的文件或文件夹
      test.txt
      sftp>
    2. 执行以下命令,上传或下载文件、文件夹。
      • 上传文件或文件夹
        put -r 文件或文件夹 指定目录
        例如:上传test.txt文件到sftp的/test目录,命令如下:
        说明 /指sftp的根目录,即 /home/sftpuser
        put -r test.txt /test
        回显信息类似如下所示。
        sftp> put -r test.txt /test
        Uploading test.txt to /test/test.txt
        test.txt                                                          100%    0     0.0KB/s   00:00
      • 下载文件或文件夹
        get -r 文件或文件夹 指定目录
        例如:下载test.txt文件到本地云服务器的当前目录(可以不指定目录),命令如下:
        get -r /test/test.txt
        回显信息类似如下所示。
        sftp> get -r /test/test.txt
        Fetching /test/test.txt to test.txt
    3. 执行以下命令,退出SFTP。
      exit