解决群晖无法使用 ssh 密钥登录的问题
内容提要
群晖NAS的homes目录被Alist等用户通过ACL授予写权限后,sshd读取authorized_keys时会因家目录可被他人写入而拒绝密钥登录。排查需用调试模式查看sshd日志。解决方案有三种:更新ACL权限表、将authorized_keys移至家目录外,或关闭StrictModes选项。作者采用关闭StrictModes,但警告此举有安全风险,切勿对公网开放SSH端口。
延伸解读
ACL 权限如何干扰 SSH 密钥登录
群晖 NAS 的 homes 目录被 Alist 等用户通过 ACL 授予写权限后,sshd 在读取 authorized_keys 时会检查家目录是否可被其他非特权用户写入。由于 ACL 优先级高于传统权限,即使 authorized_keys 权限正确,家目录可写也会导致 sshd 拒绝密钥认证。这解释了为何常规权限调整无效。
三种解决方案的适用场景与代价
更新 ACL 权限表适合无需其他用户读取家目录的情况,操作简单但可能影响现有共享。将 authorized_keys 移至家目录外可绕过检查,但会导致其他用户无法使用密钥登录。关闭 StrictModes 虽能解决问题,但会降低安全性,仅建议在非公网环境使用。
关闭 StrictModes 的安全风险
StrictModes 选项控制 sshd 是否检查用户文件和家目录的权限与所有权。关闭后,sshd 不再进行这些检查,使得家目录可写时仍能使用密钥登录。然而,这增加了未授权用户篡改 authorized_keys 的风险。若必须关闭,切勿将 SSH 端口暴露于公网,以免遭受攻击。
Q&A
群晖NAS上SSH密钥登录失败,一直提示输入密码,可能是什么原因?
可能是由于ACL权限问题导致sshd拒绝密钥认证。当homes目录被Alist等用户通过ACL授予写权限后,sshd读取authorized_keys时会因家目录可被他人写入而拒绝密钥登录。
如何调试群晖SSH密钥登录失败的问题?
可以在另一个端口上开启一个sshd进程并打开debug日志输出,命令为:/bin/sshd -d -p 2222,然后尝试连接:ssh <name>@<addr> -p 2222,通过日志查看具体错误。
authorized_keys文件对权限有什么要求?
authorized_keys文件必须属于用户本人,推荐权限为600,但并非强制。关键要求是:如果文件位于家目录~/.ssh下,则家目录~本身对于其他非特权用户必须是不可写的,除非将StrictModes选项设置为"no"。
ACL权限如何导致群晖SSH密钥登录失败?
在群晖中,为了给Alist用户授予homes目录的读写权限,使用了ACL。这导致homes目录(即用户家目录的父目录)对其他用户可写,违反了authorized_keys对家目录不可写的要求,因此sshd拒绝密钥认证。
解决群晖SSH密钥登录问题有哪些方法?
有三种解决方案:1. 更新ACL权限表,在File Station中对homes目录重新设置权限;2. 调整sshd_config中authorized_keys的位置,使用绝对路径将其放到家目录之外;3. 关闭StrictModes选项。
关闭StrictModes选项有什么风险?
关闭StrictModes后,sshd不再检查用户文件和家目录的权限和所有权,这解决了ACL权限问题,但会降低安全性。如果开启StrictModes,千万不要将SSH端口对公网开放,否则非常危险。