搭建 SFTP 服务的使用方式记录

如果想对外提供一份文件上传服务但又不想额外搭建 HTTP/FTP 服务器,可以使用 SSH 自带的 SFTP 进行文件上传


1、前言

因为懒,也不是很喜欢 vsftpd 的服务搭建和管理方式,scp 传输协议 和 SSH 绑定的太彻底,所以最后选了 SFTP 给别人上传数据用。


2、搭建方法

首先创建 sftp 用户,本例用户名 sftpuser

useradd -s /sbin/nologin sftpuser

passwd sftpuser

然后我们需要修改 sshd 配置文件,找到文件最后一行

Subsystem sftp /usr/libexec/openssh/sftp-server

将这行内容替换为以下内容,注意为了区分和 SSH 的登陆方式这里限制为仅密码认证

Subsystem sftp internal-sftp
Match User sftpuser
    AuthenticationMethods password
    X11Forwarding no
    AllowTcpForwarding no
    PermitTTY no
    ForceCommand internal-sftp
    ChrootDirectory /home/sftpuser

改好后,我们需要修改文件夹权限

chown -R root:root /home/sftpuser
mkdir /home/sftpuser/upload
chown -R sftpuser:sftpuser /home/sftpuser/upload

最后,我们就可以进行测试了

sftp -P 22 [email protected]

3、额外说明

查阅资料的时候发现会出两个 broken pipe 的情况

第一种是在连接时直接提示 packet_write_wait: Connection to 127.0.0.1 port 22 : broken pipe

这个错误的原因,文件夹权限配置错误,你需要给 ChrootDirectory /home/sftpuser 锁定的目录和往上所有目录设置

第二种是在连接后超时被 broken pipe ,但是我没有遇到。解决方式是在用户配置块里添加两个额外参数

ClientAliveInterval 60
ClientAliveCountMax 1

4、参考链接

通过 SSH 配置纯 SFTP 用户及权限 [ 链接 ]

点赞