## 一、SFTP简述 sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口和SSH一样为22。sftp通过使用加密/解密技术来保障传输文件的安全性,因此sftp的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。 SFTP可以从远程服务器上下载/上传文件,使用的是SSH的22端口,通常情况下开启了ssh服务后,sftp服务也默认也开启。 ## 二、SFTP服务配置(CentOS) 在CentOS 7系统中按照如下步骤配置sftp服务。 1、使用root用户查看openssh的版本:版本需要大于4.8p1 ```bash ssh -V #如果版本过低,可以使用 yun update 进行更新 ``` 2、使用root用户创建用户组,组名为sftpgroup;创建sftp用户,用户名为sftpuser,并设置密码。 ```bash groupadd sftpgroup #创建用户组 useradd -g sftpgroup -M -s /sbin/nologin sftpuser #-M 表示创建用户时不生成对应home目录,-s /sbin/nologin 表示sftp用户不能登录系统 passwd sftpuser #修改sftpuser用户密码 ``` 3、修改配置文件sshd_config ```bash vim /etc/ssh/sshd_config ========================================================== 将下面这行注释掉 #Subsystem sftp /usr/libexec/openssh/sftp-server ## 在文件末尾添加如下几行 Subsystem sftp internal-sftp Match Group sftpgroup X11Forwarding no AllowTcpForwarding no ChrootDirectory %h ForceCommand internal-sftp =========================================================== ``` 4、使用root用户新建目录/home/sftpfile,将其设置为sftpuser的home目录,并指定目录权限 ```bash mkdir -p /sftp/sftpuser //-p 表示parents,即递归创建目录 usermod -d /sftp/sftpuser sftpuser // -d 表示修改用户home目录 // 设置Chroot目录权限 chown root:sftpgroup /sftp/sftpuser chmod 755 /sftp/sftpuser // 设置sftp用户可以操作的目录 mkdir /sftp/sftpuser/upload chown sftpuser:sftpgroup /sftp/sftpuser/upload chmod 755 /sftp/sftpuser/upload ``` 5、重启SSH ```bash systemctl restart sshd.service ``` 6、验证:切换到sftpuser用户进行验证 ```bash sftp sftpuser@127.0.0.1 ``` ## 三、SFTP常用命令 sftp的常用命令和ftp基本相同,使用help可查询。 ```bash #连接服务器 sftp 172.16.33.106 sftp>ls ... #上传文件用put sftp>put /home/jilan/xxxx.txt #下载文件用get sftp>get /home/jilan/text.c ``` 对于远程服务器主机常用的SFTP使用的命令 | sftp命令 | 说明 | | ----------------------------------------------------- | ------------------------------------------------------------ | | cd | 切换目录 | | mkdir | 创建目录 | | ls、dir | 列出目录 | | rmdir | 删除目录 | | pwd | 显示当前目录 | | chgrp | 更改文件或目录的用户组 | | chown | 更改文件或目录的所有者 | | chmod | 更改文件或目录的权限 | | ln | 建立连接文件 | | exit、bye、quit | 离开远程主机 | | put [本机目录或文件] [远程]
put [本机目录或文件] | 将本机文件上传至服务器,如果是后一种格式,则文件会存储到当前远程主机的目录。 | | get [远程目录或文件] [本机]
get [远程目录或文件] | 将文件由远程主机下载回来,如果是后一种格式,则文件会存储到当前主机的目录中。 |