温馨提示×

CentOS SFTP如何配密钥

小樊
44
2026-07-20 10:31:16
栏目: 智能运维

下面给你一份**在 CentOS 上配置 SFTP 使用密钥登录(禁用或可选密码)**的完整、常用做法,适用于 CentOS 7 / 8 / Stream


一、前提说明

  • SFTP 基于 SSH,所以本质是 SSH 密钥登录配置
  • 假设:
    • 服务器:CentOS
    • 客户端:Linux / Windows(如 Xshell、MobaXterm、WinSCP)
  • 目标:用户通过 私钥登录 SFTP,不再使用密码

二、服务器端配置(CentOS)

1️⃣ 确认 SSH 服务已安装并运行

systemctl status sshd

如未启动:

systemctl start sshd
systemctl enable sshd

2️⃣ 创建 SFTP 用户(如已有可跳过)

useradd sftpuser
passwd sftpuser   # 可先设置,后面可禁用密码

3️⃣ 创建密钥对(服务器端或客户端)

✅ 推荐方式:在客户端生成,公钥上传服务器

客户端(Linux / macOS)
ssh-keygen -t rsa -b 4096

一路回车:

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

4️⃣ 上传公钥到 CentOS 服务器

方法一(推荐)

ssh-copy-id sftpuser@服务器IP

方法二(手动)

# 服务器上
mkdir -p /home/sftpuser/.ssh
chmod 700 /home/sftpuser/.ssh

# 把客户端的 id_rsa.pub 内容写入
vi /home/sftpuser/.ssh/authorized_keys
chmod 600 /home/sftpuser/.ssh/authorized_keys
chown -R sftpuser:sftpuser /home/sftpuser/.ssh

5️⃣ 配置 SSH(关键)

编辑:

vi /etc/ssh/sshd_config

确保或添加以下内容:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

⚠️ 不要误禁用 SSH 自身


6️⃣(可选)限制该用户仅 SFTP,不能 SSH

Match User sftpuser
    ForceCommand internal-sftp
    PasswordAuthentication no
    ChrootDirectory /home/sftpuser
    PermitTunnel no
    AllowAgentForwarding no
    X11Forwarding no

⚠️ ChrootDirectory 权限要求非常严格

chown root:root /home/sftpuser
chmod 755 /home/sftpuser

上传目录需单独建:

mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload

7️⃣ 重启 SSH

systemctl restart sshd

三、客户端连接测试

Linux / macOS

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

Windows(WinSCP / Xshell)

  • 协议:SFTP
  • 登录方式:密钥
  • 私钥文件:id_rsa
  • 用户名:sftpuser

四、常见问题排查

❌ 仍提示输入密码

# 查看日志
tail -f /var/log/secure

常见原因:

  • .sshauthorized_keys 权限不对
  • SELinux 限制

临时验证 SELinux:

setenforce 0

如可行,再修复:

restorecon -Rv /home/sftpuser/.ssh

❌ ChrootDirectory 导致无法登录

错误示例:

bad ownership or modes for chroot directory

✅ 正确:

  • Chroot 目录 必须是 root 拥有
  • 不能有组写权限

五、安全建议 ✅

  • 禁用 root 登录
PermitRootLogin no
  • 禁用全局密码登录(谨慎)
PasswordAuthentication no
  • 使用非 22 端口

六、总结流程

生成密钥 → 上传公钥 → 配置 sshd → 重启 sshd → 测试 SFTP

如果你愿意,我可以:

  • ✅ 按 CentOS 7 / 8 / Stream 精确给配置
  • ✅ 给你 WinSCP / Xshell 图文步骤
  • ✅ 帮你排查 /var/log/secure 报错

直接告诉我你的 CentOS 版本 + 使用场景 即可。

0