温馨提示×

Linux SFTP如何启用密钥

小樊
38
2026-07-31 13:14:50
栏目: 智能运维

在 Linux 上启用 SFTP 密钥认证,核心思路是:
用 SSH 密钥代替密码登录,SFTP 底层走的是 SSH,所以只要 SSH 支持密钥登录,SFTP 自然就支持。

下面按 最常见、最安全 的方式一步步说明(以 OpenSSH 为例)。


一、前提条件

  • 已安装 OpenSSH Server
    sudo systemctl status sshd
    
  • 客户端能 SSH 到服务器

二、服务器端配置(只需一次)

1️⃣ 确认 SSH 允许公钥认证

编辑配置:

sudo vi /etc/ssh/sshd_config

确保以下配置存在且未被注释:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

⚠️ 如果改了配置,需要重启 SSH:

sudo systemctl restart sshd

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

1️⃣ 在客户端生成密钥

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

或(兼容旧系统):

ssh-keygen -t rsa -b 4096

一路回车即可,会生成:

  • 私钥:~/.ssh/id_ed25519
  • 公钥:~/.ssh/id_ed25519.pub

⚠️ 私钥不要泄露


四、把公钥放到服务器(关键步骤)

方法一:自动方式(推荐)

ssh-copy-id user@server_ip

方法二:手动方式

  1. 查看公钥内容:
    cat ~/.ssh/id_ed25519.pub
    
  2. 登录服务器,放到对应用户目录:
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    nano ~/.ssh/authorized_keys
    
  3. 粘贴公钥内容
  4. 设置权限(非常重要):
    chmod 600 ~/.ssh/authorized_keys
    

五、测试 SSH / SFTP 密钥登录

测试 SSH

ssh user@server_ip

✅ 不再提示输入密码

测试 SFTP

sftp user@server_ip

六、禁用密码登录(可选但强烈推荐)

确认密钥登录成功后,再执行:

sudo vi /etc/ssh/sshd_config

修改:

PasswordAuthentication no

重启 SSH:

sudo systemctl restart sshd

七、常见问题排查

1️⃣ 权限错误(最常见)

Permission denied (publickey)

检查:

ls -ld ~
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys

正确权限示例:

drwx------ user user ~
drwx------ user user .ssh
-rw------- user user authorized_keys

2️⃣ SELinux 问题(CentOS / RHEL)

restorecon -Rv ~/.ssh

八、仅允许 SFTP(禁止 SSH Shell,可选)

Subsystem sftp internal-sftp

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp
    PasswordAuthentication no

⚠️ ChrootDirectory 必须由 root 拥有,且权限 ≤ 755


九、总结流程(速查)

✅ 生成密钥
✅ 上传公钥到服务器
✅ 设置正确权限
✅ 启用 PubkeyAuthentication
✅ 禁用密码登录


如果你愿意,可以告诉我:

  • 服务器系统(Ubuntu / CentOS / Debian)
  • 是否 只允许 SFTP,不允许 SSH
  • 是否 多用户隔离

我可以给你一份 可直接用的完整配置模板

0