在 CentOS 上配置 SFTP 使用密钥登录(禁用或不用密码),一般步骤如下:
useradd -m sftpuser
passwd sftpuser # 如果只允许密钥登录,可不设密码或设复杂密码
mkdir -p /home/sftpuser/.ssh
chmod 700 /home/sftpuser/.ssh
touch /home/sftpuser/.ssh/authorized_keys
chmod 600 /home/sftpuser/.ssh/authorized_keys
chown -R sftpuser:sftpuser /home/sftpuser/.ssh
将 客户端生成的公钥(id_rsa.pub)内容写入:
/home/sftpuser/.ssh/authorized_keys
示例:
echo "ssh-rsa AAAA......" >> /home/sftpuser/.ssh/authorized_keys
ssh-keygen -t rsa -b 4096
生成:
~/.ssh/id_rsa~/.ssh/id_rsa.pubssh-keygen
vi /etc/ssh/sshd_config
确保或添加:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 禁止密码登录(可选)
Match User sftpuser
PasswordAuthentication no
ForceCommand internal-sftp
ChrootDirectory /home/sftpuser
X11Forwarding no
AllowTcpForwarding no
⚠️ 注意:
ChrootDirectory目录属主必须是 rootchown 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
# 查看 SSH 日志
tail -f /var/log/secure
# 权限问题常见原因
# .ssh 700
# authorized_keys 600
# chroot 目录 root 拥有
如果你需要 只给 SFTP 不给 SSH、多用户隔离、或 使用 ED25519 密钥,我可以继续细化配置。