在 CentOS 上 SFTP 无法连接 是比较常见的问题,通常和 SSH 服务、防火墙、SELinux、用户权限、配置错误 有关。下面按 排查顺序 给你一套完整思路。
SFTP 依赖 sshd
systemctl status sshd
如果没运行:
systemctl start sshd
systemctl enable sshd
在客户端测试:
ping 服务器IP
telnet 服务器IP 22
或
ssh 用户名@服务器IP
如果 22 端口不通,看防火墙。
firewall-cmd --list-all
如果没开放 SSH:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
iptables -L -n
service iptables stop # 临时测试
查看:
getenforce
如果是 Enforcing,可临时关闭测试:
setenforce 0
如果关闭后能连,说明是 SELinux 限制:
setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home
id 用户名
passwd 用户名
SFTP 用户家目录不能过宽松:
chown root:root /home/用户名
chmod 755 /home/用户名
如果要可写目录:
mkdir /home/用户名/upload
chown 用户名:用户名 /home/用户名/upload
vi /etc/ssh/sshd_config
确认:
Subsystem sftp internal-sftp
如果有类似:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
注意:
ChrootDirectory 属主必须是 root修改后:
systemctl restart sshd
| 报错 | 原因 |
|---|---|
| Connection refused | sshd 没开 / 防火墙 |
| Connection timeout | 网络 / 防火墙 |
| permission denied | 密码错 / 用户被禁 |
| broken pipe | Chroot 权限错 |
| received message too long | sshd_config 写错 |
你可以告诉我:
我可以直接给你 对应配置文件示例。