![SFTP 公钥身份验证适用于一名用户,不适用于其他用户](https://linux22.com/image/192943/SFTP%20%E5%85%AC%E9%92%A5%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E9%80%82%E7%94%A8%E4%BA%8E%E4%B8%80%E5%90%8D%E7%94%A8%E6%88%B7%EF%BC%8C%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%E5%85%B6%E4%BB%96%E7%94%A8%E6%88%B7.png)
我有一个用户能够使用公钥通过 SFTP 登录,但无法设置任何其他用户以相同的方式工作。我搜索过其他类似的问题,解决方案通常与所有权或权限有关,但我已经检查了此配置数十次,一切都正确排列。
期望的结果是让客户端使用单个密钥对使用多个帐户连接到服务器。在当前配置下,两个用户的authorized_keys文件的内容是相同的,并且我确信客户端上的私钥与服务器上安装的公钥绝对匹配。
有效的用户:
# id ideal-dwh
uid=514(ideal-dwh) gid=514(ideal-dwh) groups=514(ideal-dwh),519(sftp-users)
# ls -la
total 48
drwxr-xr-x 4 root sftp-users 4096 Jul 12 21:08 .
drwx-----x 6 root root 4096 Jul 13 14:13 ..
drwx--x--- 2 root sftp-users 4096 Jul 12 21:10 .ssh
drwxr-xr-x 2 ideal-dwh sftp-users 36864 Jul 13 05:45 uploads
# cd .ssh
# ls -la
total 16
drwx--x--- 2 root sftp-users 4096 Jul 12 21:10 .
drwxr-xr-x 4 root sftp-users 4096 Jul 12 21:08 ..
-rw-r--r-- 1 root sftp-users 1036 Jul 12 16:01 authorized_keys
以及不起作用的用户:
# id gapautoparts-dwh
uid=524(gapautoparts-dwh) gid=524(gapautoparts-dwh) groups=524(gapautoparts-dwh),519(sftp-users)
# ls -la
total 48
drwxr-xr-x 4 root sftp-users 4096 Jul 13 14:13 .
drwx-----x 6 root root 4096 Jul 13 14:13 ..
drwx--x--- 2 root sftp-users 4096 Jul 13 14:13 .ssh
drwxr-xr-x 2 gapautoparts-dwh sftp-users 36864 Jul 13 14:13 uploads
# cd .ssh
# ls -la
total 16
drwx--x--- 2 root sftp-users 4096 Jul 13 14:13 .
drwxr-xr-x 4 root sftp-users 4096 Jul 13 14:13 ..
-rw-r--r-- 1 root sftp-users 1036 Jul 13 14:13 authorized_keys
sshd_配置内容
LogLevel VERBOSE
...
Match Group sftp-users
ChrootDirectory /data/%u
ForceCommand internal-sftp -d /uploads
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
这验证日志文件为空,尽管配置文件中的日志级别很详细,但安全日志未显示与失败的登录尝试相关的任何内容。
尝试与第二个用户连接时出现的具体错误:
Status: Connecting to server...
Status: Using username "gapautoparts-dwh".
Status: Server refused our key
Status: Access denied
Error: Authentication failed.
Error: Critical error: Could not connect to server
Status: Disconnected from server
到目前为止我已经尝试过:
更改权限和所有权
在研究这个问题时,这似乎是最常见的解决方案。我通常看到的推荐设置是让连接用户/组拥有.ssh目录及其内容,具有 700 权限.ssh目录和 600 权限授权密钥文件。对损坏的用户进行更改似乎没有任何区别。此外,在工作用户上设置这些所有者/权限实际上会破坏事情。
我几乎尝试了所有我能想到的所有权和权限的组合,但没有成功。将当前工作用户的所有权和权限更改为我已经拥有的以外的任何内容都会破坏一切。
使用不同的密钥对
我想要的结果是使用特定的密钥对来连接两个用户,但在故障排除中我也尝试使用不同的密钥对,更新授权密钥根据需要归档。
这对于损坏的用户来说没有什么区别。对于工作用户,我可以使用为服务器和客户端设置的任何密钥对进行连接。
从新用户开始
该问题并不限于我在这篇文章中分享的特定用户。我按照与创建工作用户相同的步骤创建了其他用户,但无法与其中任何一个用户连接。
在 sshd_config 中设置用户特定的设置
我还尝试将用户特定的规则添加到 sshd_config 来代替组设置,但没有成功。添加以下内容没有什么区别:
Match User gapautoparts-dwh
ChrootDirectory /data/gapautoparts-dwh
ForceCommand internal-sftp -d /uploads
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
答案1
问题最终是没有为新用户正确设置主目录。
尽管使用以下命令来创建用户:
useradd -g sftp-users -d /data/gapautoparts-dwh/ gapautoparts-dwh
/etc/passwd 中的条目添加为:
gapautoparts-dwh:x:524:524::/home/gapautoparts-dwh:/bin/bash
为什么 -d 标志不起作用是我必须研究的其他问题,但这个问题已解决。