在 Debian 上搭建 SFTP 服务器(基于 OpenSSH,最常用、最安全)一般步骤如下。下面以 Debian 11 / 12 为例,适用于只允许 SFTP、禁止 SSH 登录的场景。
sudo apt update
sudo apt install openssh-server
确认服务运行:
sudo systemctl status ssh
sudo adduser sftpuser
或指定 nologin:
sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
⚠️ SFTP 根目录必须归 root 所有,且权限不能大于 755
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload
编辑配置文件:
sudo nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果有多个用户,可用组:
Match Group sftp
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
sudo systemctl restart ssh
从本地或远程:
sftp sftpuser@服务器IP
示例:
sftp sftpuser@192.168.1.100
登录后:
cd upload
put test.txt
原因:Chroot 目录不是 root 所有或权限 > 755
✅ 解决:
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
✅ 上传目录需用户可写:
chown sftpuser:sftpuser /sftp/sftpuser/upload
ssh-keygen
ssh-copy-id sftpuser@ip
并在 sshd_config 中:
PasswordAuthentication no
如果你需要:
可以告诉我,我可以给你更具体的配置。