







将用户的登录 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 的连接过程会经历两个关键阶段:
用户认证阶段:此时服务器验证用户名和密码。在这个阶段,用户的 shell (如 /sbin/nologin) 通常不影响密码验证的成功与否。
会话建立与 chroot 阶段:认证成功后,OpenSSH 服务器会尝试将用户会话锁定(即 chroot)到指定的目录中。然后,它需要在这个被锁定的新环境里执行用户的 shell 来最终完成登录。
问题就出在第二阶段。ChrootDirectory 及其所有父目录必须满足一个非常严格的条件,chroot 操作才能成功:
如果这个目录的权限设置得过松(例如,属主是用户自己,或者权限为 777),chroot 操作就会失败。由于用户被设置了 nologin,在 chroot 失败后,SFTP 会话无法回退到任何交互式 shell 来建立连接,客户端就会收到一个笼统的 "No supported authentication methods available" 错误,尽管密码本身是正确的。
要解决这个问题,请按照以下步骤检查和修复:
检查并修正 Chroot 目录权限:
创建用户可写的上传目录:
修改权限后,用户自己无法在属于 root 的家目录里写入文件。因此,你需要在家目录下创建一个子目录(例如 upload)用于文件传输,并将这个子目录的属主还给用户。
创建目录并修改属主:
sudo mkdir /home/testuser/upload
sudo chown testuser:testuser /home/testuser/upload
sudo chmod 755 /home/testuser/upload
重启 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
希望这些步骤能帮你解决问题。如果在操作过程中遇到其他错误,可以把 /var/log/auth.log 或 /var/log/secure 里的相关日志贴出来,我们可以一起再看看。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。