温馨提示×

CentOS SFTP报错怎么解决

小樊
62
2026-07-08 18:24:34
栏目: 智能运维

CentOS 上 SFTP 报错原因很多,通常和 SSH、权限、SELinux、配置 有关。下面我按常见报错场景 → 原因 → 解决方法给你一个排查清单,基本能覆盖 90% 的情况。


一、先确认:是 SFTP 还是 SSH 问题?

SFTP 依赖 sshd,先测试 SSH 是否正常:

ssh user@服务器IP
  • ✅ SSH 能连 → 问题在 SFTP 配置
  • ❌ SSH 也连不上 → 先修 SSH(防火墙 / 端口 / 服务)

二、最常见报错 & 解决方案

✅ 1. Connection closed / Broken pipe

现象

Connection closed

kex_exchange_identification: Connection closed by remote host

原因

  • sshd 服务未启动
  • 防火墙拦截
  • SELinux 限制

解决

systemctl status sshd
systemctl restart sshd

防火墙:

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

SELinux(临时测试):

setenforce 0

✅ 2. Permission denied

现象

Permission denied (publickey,password)

原因

  • 用户密码错误
  • 用户被禁止登录
  • 家目录权限不对

解决 1️⃣ 确认用户可用:

passwd -S 用户名

2️⃣ 家目录权限必须正确:

chmod 700 /home/用户名
chown 用户名:用户名 /home/用户名

3️⃣ 检查:

grep 用户名 /etc/passwd

确保 shell 不是 /sbin/nologin(除非你用 sftp 专用配置)


✅ 3. 使用 Chroot 后 SFTP 连不上(非常常见)

配置示例

Subsystem sftp internal-sftp

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp

报错

broken pipe
packet_write_wait: Connection to x.x.x.x port 22: Broken pipe

原因

ChrootDirectory 及其所有上级目录必须:

  • root 拥有
  • 其他用户不可写

正确权限

chown root:root /data/sftp
chmod 755 /data/sftp

用户目录:

mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload

✅ 4. subsystem request failed on channel 0

原因

  • sftp 子系统配置错误

解决 编辑:

vim /etc/ssh/sshd_config

确认:

Subsystem sftp internal-sftp

重启:

systemctl restart sshd

✅ 5. SELinux 导致 SFTP 失败(CentOS 特有)

排查

getenforce

如果是 Enforcing,查看日志:

ausearch -m avc -ts recent

临时关闭测试

setenforce 0

永久解决(推荐)

setsebool -P ssh_chroot_rw_homedirs on

三、快速排查命令(强烈建议按顺序执行)

# 1. 查看 sshd 状态
systemctl status sshd

# 2. 查看 sshd 配置
sshd -T

# 3. 查看日志
journalctl -u sshd -f
tail -f /var/log/secure

# 4. 查看用户
id 用户名
ls -ld /home/用户名

四、客户端常见错误对照表

客户端提示 原因
Connection refused sshd 没启动 / 端口错
Connection timeout 防火墙 / 网络
Permission denied 密码 / 权限
Broken pipe Chroot 权限错误
Server refused to start a shell 强制 sftp 但 shell 错

五、如果你愿意,我可以直接帮你定位

你可以把 具体报错信息 发出来,比如:

  • 客户端报错截图 / 文字
  • /var/log/secure 相关日志
  • 是否使用 Chroot
  • CentOS 版本(7 / 8 / Stream)

我可以直接给你 精确修复命令

0