51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux SSH 免密码 Key 登录时提示“所选的用户密钥未在远程主机上注册”问题

服务器已经配置了密钥(Key)登录,但是客户端(Xshell 等)登录总是提示 "所选的用户密钥未在远程主机上注册",排查发现 Azure CentOS7 模板的 SSH 配置居然跟其他系统不一样,怪不得别的没问题,偏偏 Azure 服务器登录不了!

SSH 配置文件 /etc/ssh/sshd_config 中有这么一行

                        
                          # AuthorizedKeysFile      .ssh/authorized_key
                          
                            
                            
                          
                        
                      

Sh
Copy

如果启用 Key 登录,我们一般都是直接删除这一行前面的 # ,然而非常容易忽视的是,其他系统的文件一般都是 .ssh/authorized_keys 而这里却是 .ssh/authorized_key !!如果直接从其他系统把文件拷过来,客户端是肯定无法 Key 登录的。

其他会引起 "所选的用户密钥未在远程主机上注册" 或 "服务器拒绝了用户密钥" 问题的原因还有:

  • 文件权限: chmod 700 .sshchmod 600 .ssh/authorized_keys ,以及 authorized_keys 归属用户组(如 chown ubuntu:ubuntu .ssh/uthorized_keys
  • 密钥错误:服务器上的 authorized_keys 保存的应是公钥( rsa_id.pub ),而不是私钥( rsa_id );
  • 未开启密钥验证: /etc/ssh/sshd_config 文件中应有 PubkeyAuthentication yes 这一行,且没有被注释;
  • 用户名密钥不匹配:如密钥是放在 /home/debian/.ssh/ 下(即用户是 debian ),登录的用户名却是 ubuntu
  • 用户名被禁用:如 /etc/ssh/sshd_config 配置了 PermitRootLogin no ,却用 root 账户登录;
  • 启用了 SELinux:使用 getenforce 查看,显示的至少要是 Permissive ,如果是 Enforcing 也是不行的。临时关闭: setenforce 0 ;永久关闭:编辑 /etc/sysconfig/selinux ,其中的 SELINUX=enforcing 替换为 SELINUX=disabled

确认这几个问题后基本上都可以解决 "所选的用户密钥未在远程主机上注册" 问题了。


参考文章:

1、《 SELinux 引起的ssh公钥认证失败问题


赞(3)
未经允许不得转载:工具盒子 » Linux SSH 免密码 Key 登录时提示“所选的用户密钥未在远程主机上注册”问题