温馨提示×

如何修复centos sftp报错

小樊
47
2026-09-06 03:17:33
栏目: 智能运维

在 CentOS 上修复 SFTP 报错,需要先明确报错现象和日志,不同错误原因修复方式不同。下面我按常见报错类型 + 对应解决方案给你梳理,你可以对照使用。


一、先收集关键信息(必做)

在服务器上执行:

# 查看 SSH / SFTP 日志
journalctl -u sshd -n 50
# 或
tail -n 50 /var/log/secure

客户端连接时加 -v

sftp -v user@ip

二、常见 SFTP 报错 & 修复方法

1️⃣ Connection closed / broken pipe

原因:sshd 配置错误或 chroot 设置不当

检查 & 修复

vi /etc/ssh/sshd_config

确认包含:

Subsystem sftp internal-sftp

如果写成了:

Subsystem sftp /usr/libexec/openssh/sftp-server

且用了 ChrootDirectory,必须改为 internal-sftp

重启:

systemctl restart sshd

2️⃣ Permission denied (publickey,password)

原因:用户被禁止登录或密码认证关闭

检查

grep -E "PasswordAuthentication|PermitRootLogin" /etc/ssh/sshd_config

修复

PasswordAuthentication yes
PermitRootLogin no   # 建议普通用户
systemctl restart sshd

3️⃣ chroot directory fails

报错示例

fatal: bad ownership or modes for chroot directory

原因

  • Chroot 目录所有者必须是 root
  • 权限不能高于 755

修复

chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload

sshd_config 示例:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no

4️⃣ Write failed: Broken pipe(上传失败)

原因

  • 磁盘满了
  • SELinux 阻止

检查

df -h
getenforce

修复

# 临时关闭
setenforce 0

# 或允许 sftp 写
setsebool -P ssh_chroot_rw_homedirs on

5️⃣ No such file or directory(sftp-server 缺失)

报错

subsystem request for sftp failed

修复

rpm -q openssh-server
yum reinstall openssh-server -y

6️⃣ 防火墙 / SELinux / 端口问题

# 防火墙
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

# 端口
ss -tlnp | grep ssh

三、最小可用 SFTP 配置示例(推荐)

Subsystem sftp internal-sftp

Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

用户:

useradd -g sftp -s /sbin/nologin sftpuser

四、如果你愿意

你可以直接把具体报错内容贴出来(客户端 + /var/log/secure),我可以精准定位并给修复命令

0