温馨提示×

Ubuntu SFTP如何开启密钥

小樊
39
2026-08-28 02:29:07
栏目: 智能运维

在 Ubuntu 上开启 SFTP 密钥认证,本质就是:用 SSH 密钥登录,并限制为 SFTP(可选)。下面按推荐标准流程给你一步步说明,适用于 Ubuntu 20.04 / 22.04 / 24.04。


一、前提条件

  • 已安装并运行 OpenSSH Server
  • 你有一台 客户端机器(用来生成密钥)
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

二、在客户端生成 SSH 密钥(推荐)

你本地电脑 / 客户端执行:

ssh-keygen -t ed25519 -C "sftp-user"

如果系统不支持 ed25519,可以用:

ssh-keygen -t rsa -b 4096

一路回车即可,会生成:

  • ~/.ssh/id_ed25519(私钥,不要给别人
  • ~/.ssh/id_ed25519.pub(公钥)

三、在 Ubuntu 服务器上创建 SFTP 用户

1️⃣ 创建用户

sudo adduser sftpuser

2️⃣ 禁止 SSH Shell 登录(可选但推荐)

如果你只想允许 SFTP,不允许登录系统:

sudo usermod -s /usr/sbin/nologin sftpuser

四、配置 SSH 公钥登录

1️⃣ 在服务器上创建 .ssh 目录

sudo mkdir -p /home/sftpuser/.ssh

2️⃣ 上传公钥

把客户端 id_ed25519.pub 内容复制过来:

sudo nano /home/sftpuser/.ssh/authorized_keys

粘贴公钥内容。

3️⃣ 设置权限(非常重要)

sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys

五、配置 SSH 只允许 SFTP(推荐)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1️⃣ 确保开启以下项

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

2️⃣ 添加 SFTP 限制(推荐)

在文件末尾添加:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

3️⃣ 修复 Chroot 权限(非常关键)

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

六、重启 SSH 服务

sudo systemctl restart ssh

七、客户端连接测试

sftp -i ~/.ssh/id_ed25519 sftpuser@服务器IP

✅ 成功示例:

sftp>

八、常见问题排查

❌ 还是提示输入密码

检查:

sudo tail -f /var/log/auth.log

常见原因:

  • .ssh 权限不对
  • SELinux(Ubuntu 一般没有)
  • sshd_config 没重启

❌ Chroot 失败

bad ownership or modes for chroot directory

✅ 解决:

  • /home/sftpuser 必须是 root:root
  • 权限 755

九、安全建议(强烈推荐)

✅ 禁用密码登录(确认密钥可用后再做):

PasswordAuthentication no

✅ 修改默认端口:

Port 2222

十、总结一句话

Ubuntu 开启 SFTP 密钥 = SSH 密钥认证 +(可选)SFTP Chroot 限制

如果你需要:

  • 多用户 SFTP
  • 只允许上传不能删除
  • 配合 FileZilla / WinSCP
  • Docker / 云服务器

可以直接告诉我你的使用场景,我可以给你定制配置。

0