前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务器拒绝了我的ssh免密登录

服务器拒绝了我的ssh免密登录

作者头像
Tusi
发布2022-11-23 14:46:15
1.3K0
发布2022-11-23 14:46:15
举报
文章被收录于专栏:前端司南前端司南

原创@前端司南

众里寻他千百度,蓦然回首,答案就在眼皮子底下......

正如标题所述,我遇到的问题是服务器拒绝了我的ssh免密登录,具体情况是我之前已经配置好了ssh免密登录,但是最近突发 PC ssh 登录云服务器报错,接连好些天都没找到原因。

ssh 免密码登录本身不是一个复杂的问题,百度 / google 上面随便都找得到教程。关键点在于:

  1. 基于 RSA 密钥对保障通信的安全。
  2. 将公钥传递到目标服务器的 ~/.ssh/authorized_keys 中。

我自己的一台个人服务器原本也配置好了 authorized_keys,免密登录一直用得挺好,在PC本地,remote CI/CD 中一直跑得通。

然而,最近我不知道在服务器上调整了什么,或者是我的 PC 发生了什么升级,不记得了,反正现象就是在 git bash 使用 ssh 免密登录上不去了,一直提示 Permission denied (publickey) 之类的报错信息,但是在 xshell 或者 CI/CD 中都是正常的。

代码语言:javascript
复制
$ ssh txcentos
username@xxx.xx.xx.xx: Permission denied (publickey).

网上自然有各种类似问题,解决方案诸如修改 .ssh 目录权限,修改 sshd_config 配置等,或者是说你的密钥不对(然而重新生成了也一样,emm...)。

  • 调整了权限,发现不是权限的问题
代码语言:javascript
复制
chmod 700 ~/.ssh
chmod 600 .ssh/authorized_keys
  • 调整了 sshd_config 的几个关键配置,发现也不是这个问题。
代码语言:javascript
复制
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication no

// 调整之后重启服务
systemctl restart sshd.service
// 或者
service sshd restart

其实我心里很清楚,我的问题可能不是这些情况,即使从报错信息上看还是差不多的。我抱着试试的态度,改了一遍又一遍,还是不太行,要么是提示 denied,要么是 ssh 登录时让我输入密码(这还怎么免密),有点崩溃。

最终决定从 ssh 命令上 debug 看看报错信息(这是我之前忽略的,应该从这里开始查的),

代码语言:javascript
复制
$ ssh txcentos -v

找到了这么一个关键信息。

代码语言:javascript
复制
debug1: send_pubkey_test: no mutual signature algorithm
debug1: No more authentication methods to try.

顺着no mutual signature algorithm这个信息查到了一些资料,由于 OpenSSH 从 8.8 版本由于安全原因开始弃用了 rsa 加密的密钥,需要在 .ssh 的 config 配置中加入这么一行:

代码语言:javascript
复制
PubkeyAcceptedKeyTypes +ssh-rsa

经测试真的管用,免密登录成功!

代码语言:javascript
复制
$ ssh xxx
Last login: Tue Sep  6 xx:xx:47 2022 from xxx.xx.xxx.xxx

附上参考的博客链接 https://blog.csdn.net/q274488181/article/details/121673370

同时我也检查了 PC 的 openssh 版本,确实是高于 8.8 版本的。

代码语言:javascript
复制
$ ssh -V
OpenSSH_9.0p1, OpenSSL 1.1.1o  3 May 2022

接着我还是去查阅 openssh 8.8 的发行日志核实了一下,确实有关于 security 的 incompatible changes,具体与 RSA/SHA-256/512 和 RSA/SHA1 有关。

详细资料可以参考 https://www.openssh.com/txt/release-8.8

总结下来就是,本次遇到问题时,我盲目自信认为可以凭自己之前的一些经验,找之前用过的一些方法去修改测试,浪费了很多时间,同时也打击了自己的信心。正确的做法是,对于一些命令行接口,可以优先确认是否能找到 debug 或者日志信息,优先从这些信息入手查问题,就比如这次的 ssh 命令,实际上是提供了 -v 选项,也就是 verbose,能看到比较详细的日志,往往会有事半功倍之效。

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bin不懂二进制 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档