在 CentOS 上配置 SFTP 使用密钥登录(禁用或保留密码登录均可),一般步骤如下:
useradd sftpuser
passwd sftpuser # 如果只使用密钥,可不设密码
推荐在客户端生成:
ssh-keygen -t rsa -b 4096
生成后:
id_rsa(私钥,放在客户端)id_rsa.pub(公钥,传到服务器).ssh 目录mkdir -p /home/sftpuser/.ssh
chmod 700 /home/sftpuser/.ssh
cat id_rsa.pub >> /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
Match User sftpuser
PasswordAuthentication no
ForceCommand internal-sftp
ChrootDirectory /home/sftpuser
X11Forwarding no
AllowTcpForwarding no
⚠️ 使用
ChrootDirectory时:
- 该目录必须 root 拥有
- 权限最好是
755
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
若用户需要上传文件,可建子目录:
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
systemctl restart sshd
sftp -i /path/to/id_rsa sftpuser@server_ip
或用 FileZilla / WinSCP:
id_rsa.ssh 700authorized_keys 600ChrootDirectory 属主为 roottail -f /var/log/secure
如果你需要 只允许 SFTP、禁止 SSH shell,或 多用户 SFTP 隔离目录,我可以进一步给你完整配置示例。