温馨提示×

Linux SFTP如何设置密钥

小樊
38
2026-08-15 19:32:34
栏目: 智能运维

下面以 OpenSSH(Linux 自带 SFTP 服务) 为例,详细说明 如何使用密钥认证登录 SFTP,并顺带说明安全配置和常见问题。


一、准备工作

  • 服务器端:Linux(已安装 OpenSSH 服务)
  • 客户端:Linux / Windows(使用 sftp 或 WinSCP / FileZilla)
  • 目标:用 私钥/公钥 登录 SFTP,不再使用密码

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

通常在 客户端机器 上生成密钥

ssh-keygen -t rsa -b 4096 -C "sftp-key"

执行过程中:

  • 密钥保存路径:~/.ssh/id_rsa(默认)
  • 是否设置密钥密码(passphrase):建议设置(更安全)

生成后:

~/.ssh/id_rsa      # 私钥(客户端保留)
~/.ssh/id_rsa.pub  # 公钥(传给服务器)

三、将公钥上传到 SFTP 服务器

方式 1:使用 ssh-copy-id(最简单)

ssh-copy-id user@server_ip

会自动把公钥写入:

~/.ssh/authorized_keys

方式 2:手动复制(适合无 ssh-copy-id)

  1. 拷贝公钥内容:
cat ~/.ssh/id_rsa.pub
  1. 登录服务器,写入 authorized_keys
mkdir -p ~/.ssh
chmod 700 ~/.ssh

nano ~/.ssh/authorized_keys
# 粘贴公钥内容
  1. 设置权限(非常关键):
chmod 600 ~/.ssh/authorized_keys

⚠️ 权限错误是密钥登录失败最常见原因


四、服务器端 SSH 配置(必须)

编辑 SSH 配置文件:

sudo nano /etc/ssh/sshd_config

确保包含以下配置:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

(可选,但常见)

PasswordAuthentication no    # 禁用密码登录(推荐)
PermitRootLogin no           # 禁止 root 登录(安全)

重启 SSH 服务:

sudo systemctl restart sshd
# 或
sudo service ssh restart

五、使用 SFTP 登录(密钥方式)

Linux / macOS 客户端

sftp -i ~/.ssh/id_rsa user@server_ip

如果私钥不是默认路径:

sftp -i /path/to/private_key user@server_ip

Windows 客户端

1️⃣ WinSCP

  • 文件协议:SFTP
  • 登录类型:密钥文件
  • 选择私钥(.ppk
    • 如果是 OpenSSH 私钥,可用 PuTTYgen 转换

2️⃣ FileZilla

  • 协议:SFTP
  • 登录类型:密钥文件
  • 选择私钥

六、常见问题排查

1️⃣ 仍然提示输入密码

检查:

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

正确权限:

.ssh → 700
authorized_keys → 600

2️⃣ SELinux 导致失败(CentOS/RHEL)

restorecon -Rv ~/.ssh

3️⃣ 查看 SSH 登录日志

sudo tail -f /var/log/secure
# 或
sudo journalctl -u sshd -f

七、只限制 SFTP(可选)

如果你希望 用户只能 SFTP,不能 SSH 登录

Subsystem sftp internal-sftp

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

⚠️ ChrootDirectory 必须:

  • 属主是 root
  • 权限 ≤ 755

八、总结流程

生成密钥 → 上传公钥 → 配置 sshd → 重启 ssh → 使用 sftp -i 登录

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

  • ✅ 服务器系统(Ubuntu / CentOS / Debian)
  • ✅ 是否只允许 SFTP
  • ✅ 是否有多用户

我可以给你 完全定制化的配置示例

0