下面按常见场景给你说明如何在 Linux 上配置 SFTP(基于 SSH 的安全文件传输)。SFTP 通常不需要额外安装服务,而是使用 OpenSSH 的 subsystem。
ssh -V
一般系统自带。如未安装:
# CentOS / RHEL
yum install -y openssh-server
# Ubuntu / Debian
apt install -y openssh-server
systemctl enable sshd
systemctl start sshd
编辑配置文件:
vim /etc/ssh/sshd_config
确保有这一行(默认一般都有):
Subsystem sftp internal-sftp
useradd sftpuser
passwd sftpuser
本地或远程测试:
sftp sftpuser@服务器IP
✅ 这是最简单、最常用的方式。
useradd -m sftpuser
passwd sftpuser
vim /etc/ssh/sshd_config
在文件末尾添加:
Match User sftpuser
PasswordAuthentication yes
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
⚠️ Chroot 目录必须 root 拥有,且其他用户不可写
systemctl restart sshd
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
groupadd sftp
useradd -g sftp -s /sbin/nologin user1
mkdir -p /data/sftp/user1
chown root:root /data/sftp/user1
ssh-keygen -t rsa
把公钥写入:
/home/sftpuser/.ssh/authorized_keys
chmod 600 authorized_keys
sshd_config 中:
PubkeyAuthentication yes
journalctl -u sshd
broken pipe通常是 Chroot 目录权限错误
| 需求 | 方案 |
|---|---|
| 普通 SFTP | 直接用系统用户 |
| 禁止 SSH | Match User + ForceCommand |
| 多用户 | Match Group |
| 安全 | 密钥登录 |
如果你告诉我:
我可以直接给你一份可直接用的配置。