温馨提示×

CentOS怎样用密钥登SFTP

小樊
32
2026-08-18 22:14:00
栏目: 智能运维

CentOS 上通过 密钥登录 SFTP,本质是 SSH 密钥认证 + SFTP 子系统。下面给你一套从零到可用的标准做法(适用于 CentOS 7/8/Stream)。


一、原理说明(先看这个)

  • SFTP 走的是 SSH 协议
  • 登录方式:
    • 密码登录 ✅(默认)
    • 密钥登录 ✅(推荐)
  • 只要 SSH 能用密钥登录,SFTP 就可以

二、在客户端生成 SSH 密钥(本地电脑)

ssh-keygen -t rsa -b 4096

一路回车即可,会生成:

~/.ssh/id_rsa        # 私钥(自己保留)
~/.ssh/id_rsa.pub    # 公钥(放到服务器)

三、服务器端配置(CentOS)

1️⃣ 安装 SSH(一般已安装)

rpm -qa | grep openssh

如果没有:

yum install -y openssh-server
systemctl enable sshd
systemctl start sshd

2️⃣ 创建 SFTP 用户(示例:sftpuser)

useradd -m sftpuser
passwd sftpuser   # 可以先设密码,后面可禁用

3️⃣ 配置公钥登录

在服务器上:

su - sftpuser
mkdir -p ~/.ssh
chmod 700 ~/.ssh

把客户端 id_rsa.pub 内容写入:

vi ~/.ssh/authorized_keys

粘贴公钥内容后:

chmod 600 ~/.ssh/authorized_keys

⚠️ 权限非常重要,错了就登不上


四、SSH 服务端配置(关键)

编辑:

vi /etc/ssh/sshd_config

确保有以下内容:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如果需要禁止密码登录(可选但推荐):

PasswordAuthentication no

重启 SSH:

systemctl restart sshd

五、限制用户只能 SFTP(可选但常用)

如果你只想给用户 SFTP 权限,不能 SSH 登录

vi /etc/ssh/sshd_config

在文件末尾增加:

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

⚠️ ChrootDirectory 权限要求非常严格

正确权限示例:

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

再给用户一个可写目录:

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

重启 SSH:

systemctl restart sshd

六、客户端使用 SFTP 登录

命令行方式:

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

Windows 工具(推荐):

  • WinSCP
    • 协议:SFTP
    • 登录类型:密钥文件
    • 选择 id_rsa
  • FileZilla
    • 协议:SFTP
    • 登录类型:密钥文件

七、常见问题排查

❌ 密钥登录失败

查看日志:

tail -f /var/log/secure

常见原因:

  • .ssh 权限不是 700
  • authorized_keys 不是 600
  • SELinux 未放行

SELinux 修复:

restorecon -Rv /home/sftpuser/.ssh

八、总结版(速查)

✅ 生成密钥
✅ 公钥放到服务器 authorized_keys
✅ 修改 sshd_config
✅ 正确权限
✅ 重启 sshd
✅ SFTP 自动支持密钥登录


如果你需要:

  • 只让某些用户 SFTP
  • 多用户隔离目录
  • 禁止 root 登录
  • 配合 Nginx / FTP 替代方案

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

0