前言

一网友询问服务器无法连接,服务器询问需要非对称验证的解决过程。趁着这事儿,顺便缕一缕我的解决思路,如果有其他的情况,恳请大佬们补充。


情景

网友开通了某云厂商的”轻量服务器“,然后在页面上正确地填入了公钥。后续反复多次重启、重置系统、重新导入公钥,均显示pubkey。同时此云厂商对于非“学生认证”的用户,或者非“政企用户”应该是比较“爱答不理”的,提起工单长时间也无人给与解决,凑巧我群里闲聊,故询问我。

这让我想起了某云给我的体验,在某公有云厂商的云服务器部署了测试业务。几天的测试过程中发现内存不足,故进行配置升级操作。升级操作进行之后,一直卡在升级中的状态。服务器是退款也退不了,操作也操作不了完全没有反应成为废品。我从来不会使用此厂商的服务,毕竟他对咱个人身份实名的账号哪怕是测试下也完全不友好,但是因为甲方指定不得不用。毕竟指定要用他们的用户多了,也就不需要像其他友商那样砸钱优待学生用户,期望学生们将来在工作中选择他们。


解释

其实本质原因很简单,root用户目前不能登录。云厂商确实为轻量服务器配置了公钥地址,服务器已经能正确的登录了。只不过云厂商为轻量服务器的Linux系统模板额外添加了具有sudo权限的普通用户。而导入公钥,也仅仅是添加至ubuntu用户的home目录,因此网友通过ubuntu用户名,以及公钥对应的私钥就能正确的连接服务器。

直接通过ubuntu用户登录服务器,然后修改sshd的配置文件,允许root登录,或者记住这一点,就能用了。但是如果是普通的服务器,或者说云服务器本身是可以的,但是用户已经折腾过一会儿了,那么就会有一些比较多的原因了。


ssh登录提示Pubkey的原因

提示pubkey是因为对应的私钥找不到。从这个角度去找:

首先!检查你有没有连错服务器了。IP与端口。如果是特定的内网之类的,当前的网络位置正确么?

如果你不想“那么麻烦”,可以直接用其他的方式连接服务器。例如云服务器通过重置密码或者进VNC控制台之类的方式启用密码登录。另外SSH也可以通过密码+OTP进行保护,如果不想到处存放私钥或者智能卡,但是手头有一些OTP令牌的话。


  1. 客户端加载私钥了么?
  1. 电脑里私钥文件存在?
  2. 代理程序运行了?
  3. 如果储存在智能卡或者其他硬件,他们正确识别了?
  4. 私钥文件是不是一致,还是传输过程中公钥、私钥有误?
  5. 软件支持这个格式的私钥么?
  6. 软件支持格式的类型么?

客户端检查不了,就需要其他辅助手段连接到服务端检查了。


  1. 服务器加载公钥了么?
  1. 公钥放置在期望登陆的用户文件夹或者其他地方已经指定?比如用户不对,文件名不对,文件没了,文件夹权限太严
  2. 是不是ssh程序boom了或者设置没保存?如果没重启过机器的可以考虑一开始就重启下sshd
  3. 服务器的ssh服务端支持你的公钥类型么?rsa? ECSSA(nistp)? ed25519?特别瘦的系统不支持后两者
  4. 允许公钥登录?
  5. 当前类型的公钥登录允许了?瘦的系统不带ed25519之外,主流的系统默认也无视DSA之类的
  6. 当前用户允许登录?
  7. selinux开着么?开着可能禁止root直接登录,检查文件夹/文件权限正确太松太严都不行