在 Ubuntu 上开启 SFTP 密钥认证,本质就是:用 SSH 密钥登录,并限制为 SFTP(可选)。下面按推荐标准流程给你一步步说明,适用于 Ubuntu 20.04 / 22.04 / 24.04。
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
在你本地电脑 / 客户端执行:
ssh-keygen -t ed25519 -C "sftp-user"
如果系统不支持
ed25519,可以用:
ssh-keygen -t rsa -b 4096
一路回车即可,会生成:
~/.ssh/id_ed25519(私钥,不要给别人)~/.ssh/id_ed25519.pub(公钥)sudo adduser sftpuser
如果你只想允许 SFTP,不允许登录系统:
sudo usermod -s /usr/sbin/nologin sftpuser
.ssh 目录sudo mkdir -p /home/sftpuser/.ssh
把客户端 id_ed25519.pub 内容复制过来:
sudo nano /home/sftpuser/.ssh/authorized_keys
粘贴公钥内容。
sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
在文件末尾添加:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Chroot 目录 必须属于 root:
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
然后给用户一个可写目录:
sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
sudo systemctl restart ssh
sftp -i ~/.ssh/id_ed25519 sftpuser@服务器IP
✅ 成功示例:
sftp>
检查:
sudo tail -f /var/log/auth.log
常见原因:
.ssh 权限不对sshd_config 没重启bad ownership or modes for chroot directory
✅ 解决:
/home/sftpuser 必须是 root:root✅ 禁用密码登录(确认密钥可用后再做):
PasswordAuthentication no
✅ 修改默认端口:
Port 2222
Ubuntu 开启 SFTP 密钥 = SSH 密钥认证 +(可选)SFTP Chroot 限制
如果你需要:
可以直接告诉我你的使用场景,我可以给你定制配置。