温馨提示×

SFTP连接Debian失败怎么解决

小樊
45
2025-12-29 17:03:49
栏目: 智能运维

按下面顺序从服务、配置、权限、网络四个维度排查,通常可在几分钟内定位并恢复 SFTP 连接。


一 快速自检

  • 确认 SSH 服务已运行(Debian 上服务名通常为ssh,部分教程写作 sshd):
    sudo systemctl status ssh
    未运行则启动:sudo systemctl start ssh;修改配置后重启:sudo systemctl restart ssh。
  • 直接用命令行测试连接:sftp 用户名@服务器IP,观察报错关键词(如 Authentication failed、Permission denied、Connection refused、Timeout)。
  • 查看实时日志,优先看认证日志:sudo tail -f /var/log/auth.log;或使用 journalctl:sudo journalctl -u ssh -f。
    以上能快速判断是服务未起、认证失败还是配置/权限问题。

二 配置与权限关键点

  • 核对 SFTP 子系统配置(/etc/ssh/sshd_config):
    推荐使用内置模块:
    Subsystem sftp internal-sftp
    若改为外部程序,路径必须存在(可用 which sftp-server 确认),否则会报 “Subsystem not found”。修改后重启 ssh 生效。
  • 如需将用户限制在家目录(Chroot),典型配置:
    Match Group sftp_users
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no
    要点:Chroot 目录必须存在、属主为 root、权限 755;否则会出现 “Cannot change directory”。
  • 用户与目录权限范式:
    • 创建组:sudo groupadd sftp_users
    • 加入用户:sudo usermod -a -G sftp_users 用户名
    • 家目录:sudo chown root:root /home/用户名 && sudo chmod 755 /home/用户名
    • 上传目录:mkdir /home/用户名/uploads && sudo chown 用户名:sftp_users /home/用户名/uploads && sudo chmod 755/775 /home/用户名/uploads
  • 认证方式:
    • 密码登录:确保密码正确、账户未锁定。
    • 密钥登录:公钥需置于用户 ~/.ssh/authorized_keys,文件权限 600,.ssh 目录 700;若使用 root 登录,确认 PermitRootLogin 配置允许。
      这些是保证 SFTP 子系统可用、目录可访问、认证能过的关键。

三 网络与防火墙

  • 本机与云侧放行 22/TCP(或自定义端口):
    • UFW:sudo ufw allow 22/tcp 或 sudo ufw allow ssh;sudo ufw enable/status 查看规则。
    • firewalld:sudo firewall-cmd --permanent --add-port=22/tcp && sudo firewall-cmd --reload。
    • 云服务器安全组需同样放行对应端口。
  • 连通性测试:
    ping 服务器IP
    telnet 服务器IP 22 或 nc -zv 服务器IP 22
    若超时,优先排查本机/边界防火墙、NAT/路由、云安全组。
  • 端口冲突或自定义端口:
    22 被占用,可在 /etc/ssh/sshd_config 中改为 Port 2222,并同步更新防火墙/安全组规则。
  • 连接数限制:
    检查 MaxStartups(如 10:30:100),并发未认证连接过多会被拒绝,可按需调大或临时放宽用于排查。
    以上步骤可排除“连不上/被拒绝/超时”等网络层问题。

四 常见报错对照与修复

报错关键词 典型原因 修复要点
Authentication failed 密码错误、账户被锁、密钥未正确部署 核对密码/解锁账户;检查 ~/.ssh/authorized_keys 权限 600 与内容;必要时用 ssh-keygen -y 校验私钥对应公钥
Permission denied 家目录或上传目录权限/属主不当、Chroot 目录非 root 所有 家目录 root:root 755;上传目录 用户名:sftp_users 755/775;Chroot 目录必须 root 所有 755
Connection refused SSH 服务未运行、端口不对、配置语法错误 systemctl status/start/restart ssh;确认 Port 与防火墙一致;sshd_config 语法无误再重启
Connection timed out 防火墙/安全组/网络不通 放行 22/TCP;检查云安全组、路由/NAT;用 telnet/nc 验证端口连通
Cannot change directory Chroot 路径不存在或权限错误 创建目录、设置 root:root 755,再重试
Subsystem not found Subsystem 路径错误或二进制不存在 改为 internal-sftp 或用 which sftp-server 校正路径后重启 ssh
“Write failed. Broken pipe” 资源/连接数限制、磁盘满、权限不足 检查磁盘空间 df -h;放宽 MaxStartups;确认上传目录可写
以上对照覆盖了大多数 SFTP 连接故障场景,可据此快速定位并修复。

0