在 CentOS 上配置 SFTP 密钥登录,一般步骤如下(以使用 OpenSSH 为例,适用于 CentOS 7/8/Stream):
systemctl status sshd
如未运行:
systemctl start sshd
systemctl enable sshd
ssh-keygen -t rsa -b 4096
一路回车即可,会生成:
~/.ssh/id_rsa(私钥)~/.ssh/id_rsa.pub(公钥)ssh-copy-id user@server_ip
在服务器上:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
把客户端 id_rsa.pub 内容追加到:
~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
useradd sftpuser
passwd sftpuser # 可设可不设
编辑:
vi /etc/ssh/sshd_config
添加或修改:
Match User sftpuser
PasswordAuthentication no
PubkeyAuthentication yes
ForceCommand internal-sftp
ChrootDirectory /home/sftpuser
X11Forwarding no
AllowTcpForwarding no
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
在 /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
重启 sshd:
systemctl restart sshd
sftp -i ~/.ssh/id_rsa sftpuser@server_ip
或在 FileZilla / WinSCP 中:
id_rsaPermission denied (publickey).
检查:
authorized_keys 权限.ssh 目录属主sshd_config 是否匹配用户tail -f /var/log/secure
如果你是要 只允许 SFTP 不允许 SSH、多用户隔离、或 使用非root用户Chroot,可以告诉我具体场景,我可以给你更精确的配置。