温馨提示×

如何排查Debian SFTP传输错误

小樊
43
2025-12-21 21:12:07
栏目: 智能运维

Debian SFTP传输错误排查手册

一 快速定位流程

  • 明确症状与范围:是登录阶段失败、目录无法列出、上传/下载中断,还是偶发超时。
  • 客户端开启详细日志:使用命令行执行例如 ssh -vvv -i /path/key user@host 或 sftp -vvv user@host,观察握手、认证、子系统加载、打开目录等关键步骤的报错关键字。
  • 服务端核对基础:确认 SSH 服务运行、端口 22/TCP 可达、以及用户凭据可用。
  • 查看服务端日志:Debian 主要查看 /var/log/auth.log(SSH 认证与子系统日志)与 journalctl -u ssh(服务运行日志)。
  • 复现与最小化:先用命令行 sftp 排除 GUI 客户端差异,再在最小化配置下验证(仅密码或仅密钥),逐步恢复自定义配置定位触发点。

二 连通性与服务检查

  • 端口与防火墙:确认服务器防火墙放行 22/TCP(如 UFW:sudo ufw allow 22/tcp;iptables:放行 22/TCP),云上安全组同样需要放行。
  • 端口连通性测试:从客户端执行 nc -v host 22 或 telnet host 22,能连上会看到 SSH 版本标识;连不上优先排查网络路径、NAT、ACL、云安全组。
  • SSH 服务状态:systemctl status ssh 或 systemctl status sshd 查看是否 active;必要时重启 systemctl restart ssh。
  • 服务可达性自检:在服务器本机执行 ssh localhost 验证本地 SSH 栈正常。

三 认证与子系统配置

  • 认证链路排查:
    • 密码认证:临时在 /etc/ssh/sshd_config 设置 PasswordAuthentication yes,PubkeyAuthentication no 后重启 ssh 测试密码登录。
    • 密钥认证:确保私钥权限为 600(chmod 600 ~/.ssh/id_rsa),公钥已正确放入对应用户的 ~/.ssh/authorized_keys;必要时用 ssh-add 加载密钥。
  • SFTP 子系统核对:
    • 确认配置存在且路径正确:grep Subsystem /etc/ssh/sshd_config,Debian 常见为 Subsystem sftp /usr/lib/openssh/sftp-server;如用内置模块可写 Subsystem sftp internal-sftp。
    • 若日志出现 “subsystem request failed on channel 0”,多为子系统未启用或路径错误。
  • 修改配置后务必重启:systemctl restart ssh。

四 权限与目录问题定位

  • 目录访问权限:对目标目录执行 ls -ldZ /path 检查所有者、权限与 SELinux/ACL 上下文;用户至少需要对该目录的 读+执行 权限才能进入并列出。
  • ACL 与 SELinux:
    • 检查 ACL:getfacl /path;
    • 检查 SELinux:getenforce(返回 Enforcing/Permissive/Disabled),如启用在 /var/log/audit/audit.log 检索 denied 记录。
  • 常见报错 “remote readdir Permission denied”:多由父目录缺少执行权限或 ACL/SELinux 限制引起,按上步逐项修正。
  • 使用 chroot 的 SFTP 用户:若配置了 Match … ChrootDirectory,需确保 chroot 根目录及其上级目录归 root:root 且权限 755,可写目录放在 chroot 内再赋权给相应用户,避免因权限不当导致无法列目录或写入。

五 常见错误对照与修复要点

症状 关键日志/命令 修复要点
Connection timed out / Connection refused 客户端 nc/telnet 失败;服务端端口未监听 放行 22/TCP、检查云安全组/本机防火墙、确认 ssh 服务运行与监听
Permission denied / Authentication failed /var/log/auth.log 出现 Failed password / Invalid user 核对用户名/密码;检查密钥权限 600 与 authorized_keys 内容;必要时临时启用密码验证验证账号本身可用性
Server refused our key /var/log/auth.log 提示 refused our key 公钥未正确部署或权限错误;authorized_keys 权限应为 600/644,属主属组为相应用户
subsystem request failed on channel 0 /var/log/auth.log 出现子系统失败 /etc/ssh/sshd_config 中 Subsystem 行缺失或路径错误;修正为 /usr/lib/openssh/sftp-server 或 internal-sftp 并重启 ssh
remote readdir Permission denied /var/log/auth.log 与 getfacl/getenforce 异常 为访问路径补齐读/执行权限;检查并修正 ACL/SELinux 上下文;chroot 场景确保根目录归 root 且权限正确
传输中断/速度异常 客户端 -vvv 显示早期关闭或超时 排查网络抖动、服务器负载、加密算法不匹配;必要时调整客户端/服务端加密套件或改用更稳定的链路

0