下面给你一份**在 CentOS 上配置 SFTP 使用密钥登录(禁用或可选密码)**的完整、常用做法,适用于 CentOS 7 / 8 / Stream。
systemctl status sshd
如未启动:
systemctl start sshd
systemctl enable sshd
useradd sftpuser
passwd sftpuser # 可先设置,后面可禁用密码
ssh-keygen -t rsa -b 4096
一路回车:
~/.ssh/id_rsa~/.ssh/id_rsa.pubssh-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
编辑:
vi /etc/ssh/sshd_config
确保或添加以下内容:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
⚠️ 不要误禁用 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
systemctl restart sshd
sftp -i ~/.ssh/id_rsa sftpuser@服务器IP
id_rsasftpuser# 查看日志
tail -f /var/log/secure
常见原因:
.ssh 或 authorized_keys 权限不对临时验证 SELinux:
setenforce 0
如可行,再修复:
restorecon -Rv /home/sftpuser/.ssh
错误示例:
bad ownership or modes for chroot directory
✅ 正确:
PermitRootLogin no
PasswordAuthentication no
生成密钥 → 上传公钥 → 配置 sshd → 重启 sshd → 测试 SFTP
如果你愿意,我可以:
/var/log/secure 报错直接告诉我你的 CentOS 版本 + 使用场景 即可。