![SSH 不允许 root 以外的用户使用公钥登录](https://linux22.com/image/1189050/SSH%20%E4%B8%8D%E5%85%81%E8%AE%B8%20root%20%E4%BB%A5%E5%A4%96%E7%9A%84%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E5%85%AC%E9%92%A5%E7%99%BB%E5%BD%95.png)
我有一个 Ubuntu 22.04.1 安装,并且正在使用公钥 + 私钥身份验证登录 ssh。
以下是我采取的步骤
- 我首先在我的 Mac 上创建了一个密钥对。
- 然后我进入服务器并进行编辑
/etc/ssh/sshd_config
以添加用于 ssh 登录的新端口 - 在防火墙(UFW)中打开该端口并关闭默认的 22。
- 我确实
ssh-copy-id -i /path/to/public/key root@host
将公钥复制到了服务器上。 - 然后
/etc/ssh/sshd_config
再次禁止密码验证 - 重新启动 sshd 并使用 root 测试连接。连接工作正常。
- 我重新启用了密码验证,并通过新端口使用用户名 + 密码与我的一个 sudo 用户(不是 root)一起测试了 ssh。连接工作正常。
- 我执行了
ssh-copy-id -i /path/to/public/key user@host
将公钥复制到该特定用户的 .ssh/authorised_keys 中的服务器上的操作。该过程未返回任何错误,并报告已复制一个密钥。我登录到服务器并仔细检查了 authorised_keys 文件,发现密钥确实在那里。 - 然后
/etc/ssh/sshd_config
再次禁止密码验证 - 重新启动 sshd 并测试与用户的连接。这就是我遇到的问题用户无法登录。当我尝试登录时,出现错误:
Permission denied (publickey)
。当我重新启用密码验证时,我可以正常连接,但仍然没有密钥。只是一个标准的用户名+密码连接。
由于我对 root 用户使用了完全相同的组合,因此密钥对经过了测试。我想禁用 Permitrootlogin,但无法禁用。有什么想法吗?
编辑:我按照@Jos 的建议,使用 root 和 user 进行了详细登录。以下是 2 个结果。我过滤掉了所有敏感信息和密钥、IP 等,并将结果转换为屏幕截图:
和用户(连接失败):
编辑:@steeldriver 建议执行 namei 来检查 authorized_keys 文件是否过于宽松。以下是输出:
| => namei -l ~/.ssh/authorized_keys
f: /home/spitixorismesiti/.ssh/authorized_keys
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxrwx--- spitixorismesiti spitixorismesiti spitixorismesiti
drwx------ spitixorismesiti spitixorismesiti .ssh
-rw------- spitixorismesiti spitixorismesiti authorized_keys