可以的,CentOS 上的 SFTP 完全支持使用密钥(SSH 密钥)登录,实际上 SFTP 就是基于 SSH 的,只要 SSH 支持密钥登录,SFTP 就能用。
下面给你一个常见、可用的配置思路(以 CentOS 7/8/Stream 为例):
systemctl status sshd
如果没开:
systemctl start sshd
systemctl enable sshd
useradd sftpuser
passwd sftpuser # 可设置,也可不设置(仅密钥登录时可锁密码)
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
PasswordAuthentication no
修改后重启 SSH:
systemctl restart sshd
在 sshd_config 末尾加:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
⚠ 注意:
ChrootDirectory 目录必须 root 拥有且 755chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
Linux / macOS:
sftp -i ~/.ssh/id_rsa sftpuser@服务器IP
Windows(WinSCP / FileZilla):
id_rsa 或 ppk(WinSCP 可用 PuTTY 密钥).ssh 必须是 700authorized_keys 必须是 600restorecon -Rv /home/sftpuser/.ssh
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
✅ 结论:
CentOS 的 SFTP 不仅可以,而且推荐用密钥登录,比密码安全得多,也更适合自动化。
如果你需要,我可以给你一份完整的“仅 SFTP + 密钥 + Chroot”可直接抄的配置示例。