在 CentOS 上通过 密钥登录 SFTP,本质是 SSH 密钥认证 + SFTP 子系统。下面给你一套从零到可用的标准做法(适用于 CentOS 7/8/Stream)。
ssh-keygen -t rsa -b 4096
一路回车即可,会生成:
~/.ssh/id_rsa # 私钥(自己保留)
~/.ssh/id_rsa.pub # 公钥(放到服务器)
rpm -qa | grep openssh
如果没有:
yum install -y openssh-server
systemctl enable sshd
systemctl start sshd
useradd -m sftpuser
passwd sftpuser # 可以先设密码,后面可禁用
su - sftpuser
mkdir -p ~/.ssh
chmod 700 ~/.ssh
id_rsa.pub 内容写入:vi ~/.ssh/authorized_keys
粘贴公钥内容后:
chmod 600 ~/.ssh/authorized_keys
⚠️ 权限非常重要,错了就登不上
编辑:
vi /etc/ssh/sshd_config
确保有以下内容:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果需要禁止密码登录(可选但推荐):
PasswordAuthentication no
重启 SSH:
systemctl restart sshd
如果你只想给用户 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 -i ~/.ssh/id_rsa sftpuser@服务器IP
id_rsa查看日志:
tail -f /var/log/secure
常见原因:
.ssh 权限不是 700authorized_keys 不是 600SELinux 修复:
restorecon -Rv /home/sftpuser/.ssh
✅ 生成密钥
✅ 公钥放到服务器 authorized_keys
✅ 修改 sshd_config
✅ 正确权限
✅ 重启 sshd
✅ SFTP 自动支持密钥登录
如果你需要:
可以直接告诉我你的使用场景,我可以帮你定制一套配置。