惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
C
Check Point Blog
B
Blog RSS Feed
G
Google Developers Blog
H
Help Net Security
博客园 - Franky
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Recent Announcements
Recent Announcements
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
DataBreaches.Net
小众软件
小众软件
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
T
Tailwind CSS Blog
J
Java Code Geeks
MyScale Blog
MyScale Blog
雷峰网
雷峰网
有赞技术团队
有赞技术团队
博客园 - 聂微东

博客园 - lzlvv

debug1: Authentications that can continue: publickey sgrptprod@114.141.166.109: Permission denied (publickey). Connection closed. linux sftp 设置了用户对目录有 0700权限,但在上传时报 Permission denied错误 win10系统已经映射的网络驱动器在其他应用软件无法读到解决方案 Linux SFTP服务器部署 linux添加用户并赋予root权限 C# Socket通信 Socket传输结构数据 Windows Server 2016如何关闭和打开防火墙 | 详细教程 在‌Windows Server 2016中显示‌桌面图标的方法 C#常用正则表达式 完全图解RAID存储技术:RAID 0、1、5、6、10、50、60 MySQL 5.7 安装教程(Win 10) 在 Windows 使用 PuTTYgen 上生成 SSH 密钥 NPOI使用手册 MSSQL中添加链接数据库 Windows 批处理(bat)语法大全 Oracle ODP.NET ConnectionString接池及连接参数 SQL update select结合语句详解及应用 从FoxPro数据库中提取结构/索引到Excel
linux 服务器设置 时 /etc/passwd设置为nologin时,登录SFTP...
lzlvv · 2026-03-12 · via 博客园 - lzlvv

将用户的登录 shell 设置为 /sbin/nologin 确实是限制其通过 SSH 登录系统的正确方法。但如果在配置了 SFTP chroot 环境后遇到 "No supported authentication methods available" 错误,通常意味着 shell 设置与 chroot 环境的权限要求发生了冲突。

这个错误的核心原因很可能不是 nologin 本身,而是 SFTP chroot 环境的目录权限配置有误。

🧐 问题根源分析

当你在 /etc/ssh/sshd_config 中通过 Match Group 或 Match User 配置了 ChrootDirectory 后,SFTP 的连接过程会经历两个关键阶段:

  1. 用户认证阶段:此时服务器验证用户名和密码。在这个阶段,用户的 shell (如 /sbin/nologin) 通常不影响密码验证的成功与否。

  2. 会话建立与 chroot 阶段:认证成功后,OpenSSH 服务器会尝试将用户会话锁定(即 chroot)到指定的目录中。然后,它需要在这个被锁定的新环境里执行用户的 shell 来最终完成登录。

问题就出在第二阶段。ChrootDirectory 及其所有父目录必须满足一个非常严格的条件,chroot 操作才能成功:

  • 属主必须是 root

  • 权限必须为 755 (drwxr-xr-x) 或更严格,即属组和其他用户不能有写入权限-1-4-9

如果这个目录的权限设置得过松(例如,属主是用户自己,或者权限为 777),chroot 操作就会失败。由于用户被设置了 nologin,在 chroot 失败后,SFTP 会话无法回退到任何交互式 shell 来建立连接,客户端就会收到一个笼统的 "No supported authentication methods available" 错误,尽管密码本身是正确的。

🛠️ 解决方案

要解决这个问题,请按照以下步骤检查和修复:

  1. 检查并修正 Chroot 目录权限:

    • 假设你的 ChrootDirectory 设置为 %h (用户的家目录),例如 /home/testuser

    • 首先,将这个目录的属主修改为 root

      sudo chown root:root /home/testuser
    • 然后,将其权限修改为 755

      sudo chmod 755 /home/testuser

      这是最关键的一步,必须严格执行-1-5

  2. 创建用户可写的上传目录:

    • 修改权限后,用户自己无法在属于 root 的家目录里写入文件。因此,你需要在家目录下创建一个子目录(例如 upload)用于文件传输,并将这个子目录的属主还给用户。

    • 创建目录并修改属主:

      sudo mkdir /home/testuser/upload
      sudo chown testuser:testuser /home/testuser/upload
      sudo chmod 755 /home/testuser/upload
  3. 重启 SSH 服务并测试:

    • 每次修改配置或权限后,都需要重启 SSH 服务使更改生效:

      sudo systemctl restart sshd  
    • 现在,再次尝试使用 sftp 命令连接,并开启详细日志模式以便观察过程:

      sftp -vvv testuser@your_server_ip

💡 快速验证与检查清单

为了确保万无一失,你可以核对以下几点:

  • 用户 Shell 设置:sudo usermod -s /sbin/nologin testuser -5-10。这一步本身是正确的,保留即可。

  • SSH 配置检查:确保 /etc/ssh/sshd_config 中相关的 Match 区块配置正确,例如:

    Match User testuser
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no

    修改后务必用 sudo sshd -t 检查语法。

  • 日志定位:如果问题依旧,查看详细的日志信息是定位问题的终极大法。使用以下命令实时监控认证日志,然后再次尝试连接:

    sudo tail -f /var/log/auth.log  

    日志中会精确记录失败的真正原因,是密码错误、chroot 失败还是其他权限问题-4-9

希望这些步骤能帮你解决问题。如果在操作过程中遇到其他错误,可以把 /var/log/auth.log 或 /var/log/secure 里的相关日志贴出来,我们可以一起再看看。