无法把代码推到gitee故障解决(OpenSSH签名算法不兼容)
简介
忽然发现用公钥无法把代码推到gitee,原来是我使用的OpenSSH太新,已经废弃掉了ssh-rsa签名算法,而gitee服务器的OpenSSH使用的签名算法还是ssh-rsa,签名算法不兼容,于是无法认证,无法网上推代码。
如果想看解决办法,可以直接跳到末尾“解决办法”
起因
今天像往常一样把代码推到gitee上,发现推不上去,公钥认证错误,本来因为看论文而晕晕乎乎的脑袋瞬间清醒:我帐号不是被谁盯上了吧。
❯ git push origin master
git@gitee.com: Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
我密码都是最高级别的,从不用常用密码,公钥也设置了密码,如果有人突破了我的密码,那他照样能突破我其他密码,想到这不禁后背冒出一丝凉气。
不过冷静下来之后仔细想想,这个可能性比较低。首先,我就一学生,帐号没有多大价值;其次,我也没和人结下什么仇哇???;再次,我平时都非常注意帐号安全。
肯定不是帐号被盗了。
登上gitee帐号到个人信息页,查看ssh公钥,我发现ssh公钥的sha256sum和本地的公钥一致。
奇怪,gitee帐号里面的ssh公钥没有变,怎么会登不上呢?
然后就开始了一通研究。
研究
再次验证一下是不是能登录:
❯ ssh git@gitee.com
git@gitee.com: Permission denied (publickey).
神奇的是,我用同一个密钥登录github,是可以登录的:
❯ ssh git@github.com
Hi hedonihilist! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
这问题有意思了,得研究研究,首先启用ssh的-v
选项(v
越多越详细),查看登陆过程中的信息:
❯ ssh git@gitee.com -vv
... 省略不相关输出
debug2: set_newkeys: mode 0
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /home/z/.ssh/id_rsa RSA SHA256:DydDPeQMquAx9B6SkmNQMrV9JZsP6IrvMpBJn8b0Xek agent
debug1: Will attempt key: /home/z/.ssh/id_dsa
debug1: Will attempt key: /home/z/.ssh/id_ecdsa
debug1: Will attempt key: /home/z/.ssh/id_ecdsa_sk
debug1: Will attempt key: /home/z/.ssh/id_ed25519
debug1: Will attempt key: /home/z/.ssh/id_ed25519_sk
debug1: Will attempt key: /home/z/.ssh/id_xmss
debug2: pubkey_prepare: done
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/z/.ssh/id_rsa RSA SHA256:DydDPeQMquAx9B6SkmNQMrV9JZsP6IrvMpBJn8b0Xek agent
debug1: send_pubkey_test: no mutual signature algorithm
... 省略不相关输出
可以看到输出里面有一条信息no mutual signature algorithm
,翻译一下就是“没有公共的签名算法”,一番搜索之后发现这个链接,按照里面的操作可以顺利登录gitee。
又经历一番搜索之后,基本弄明白为什么会出现这个问题了,破案了!
原因
在登录过程中,需要通过签名的方式验证双方身份,我使用的是RSA密钥,其签名算法有多种,之前默认的算法是ssh-rsa
,不过由于ssh-rsa这种签名算法不安全,所以在新版本的OpenSSH中,这种签名算法默认情况下不启用,取而代之的是rsa-sha2-512
。
我使用的是最新版的OpenSSH8.8,默认不启用ssh-rsa
算法,gitee服务器使用的是较旧版的OpenSSH,使用的是ssh-rsa
算法,而且gitee服务器也没有提供其余可供RSA密钥使用的签名算法。BANG!双方的签名算法不一致,可不就是“no mutual signature algorithm”嘛!
既然签名这一步都进行不下去,那认证就更不可能了,所以就认证错误了(Permission denied)。
还有一个令我好奇的问题没有弄明白:为什么github能登录?
答案是github为RSA类型密钥提供了额外的签名算法。
从下面命令的执行情况可以看出,github提供了一大串备用的签名算法:
❯ ssh git@github.com -vvv 2>&1 | grep ssh-rsa
debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256,ssh-rsa,ssh-dss
debug1: Server host key: ssh-rsa SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,ssh-ed25519,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ssh-dss>
其中server-sig-algs
说的就是服务器支持的签名算法,在这个列表中:
- rsa-sha2-512
- rsa-sha2-256
- ssh-rsa
都是RSA密钥的签名算法,ssh-rsa
算法不能用了,可以用另外两个更加安全的嘛
解决办法
参考:这个链接
添加ssh配置
这里需要用到一个ssh配置项:PubkeyAcceptedKeyTypes
,其含义是客户端支持的签名算法类型(参考)
对于ssh来说,使用-o
选项可以方便地添加参数:
$ ssh git@gitee.com -o PubkeyAcceptedKeyTypes=+ssh-rsa
但是在git里面不太方便传ssh的参数,不过我们可以将参数写到ssh客户端的配置文件~/.ssh/config
中:
Host gitee.comHostName gitee.comPubkeyAcceptedKeyTypes +ssh-rsa
这样设置之后,每次与gitee.com
建立ssh链接时(无论是ssh或者git),都会启用ssh-rsa
自废武功
把自己的OpenSSH版本降低一点(降低到ssh-rsa
还没被禁用的时候),这样就和gitee的兼容了。
不能惯着他
等到gitee更新OpenSSH版本、增加了新的可用的RSA签名算法之后,我再用它。
无法把代码推到gitee故障解决(OpenSSH签名算法不兼容)相关推荐
- 横河川仪压力变送器故障代码_压力变送器常见故障解决方法
压力变送器常见故障解决方法 在压力变送器的使用过程中难免出现故障,下面我们针对几种故障的解决方法进行介绍. 一.压力指示不正确 1: 压力变送器电源是否正常 如果小于 12VDC ,则应检查回路中是否 ...
- sccm2012 客户端推送安装故障解决一例
在SCCM2012中采用的高安全部署,webdav已经不再需要,客户端与分发点之间的数据传输全部采用https协议,包括WSUS的更新,在部署客户端推送安装期间遇到一个问题. SCCM2012同样提供 ...
- 主板诊断卡怎么用?主板诊断卡代码含义大全与故障解决办法
https://www.jb51.net/diannaojichu/486656.html
- 台安变频器n2按键说明_台安变频器N2型号说明参数设置故障代码及故障解决方法...
原标题:台安变频器N2型号说明参数设置故障代码及故障解决方法 台安变频器N2额定电压.功率范围: 220V单/三相(0.4KW-22KW) 380V三相(0.75KW-22KW) 台安变频器N2特点: ...
- 手机系统安装打印机服务器错误代码,OKI打印机报错?各型号代码故障解决方法...
原标题:OKI打印机报错?各型号代码故障解决方法 这一期干货贴邀请大家一起看看OKI打印机常见报错代码↓↓↓ 1.报错代码 610/611/612/613 黄色/品红色/青色/黑色碳粉盒未安装 产生原 ...
- 惠普打印机故障代码_惠普打印机常见故障解决办法【图文详解】
Hp打印机,也就是我们常说的惠普打印机,目前已经成了打印机行业中的最为人们熟知的品牌之一,不过对于大多数打印机来说,无论品牌好坏,总会在使用的过程中出现这样那样的问题,而惠普打印机在使用过程中是故障率 ...
- 代码托管平台Gitee使用教程
代码托管平台Gitee Gitee简介 Git,Github,Gitlab,Gitee介绍 Gitee使用 1,登录注册 2,新建仓库 2,本地关联远程仓库 2.1,远端初始化 2.2,本地与远端关联 ...
- linux上使用git把代码push到gitee上
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 linux上使用git把代码push到gitee上 文章目录: 1 git添加ssh公钥 2 代码推送的流程 从git的 ...
- 上传项目代码到Github|Gitee
上传项目代码到Github|Gitee 文章目录 上传项目代码到Github|Gitee 1.前置准备 1.1 Git 安装 1.2 在 Git 中设置用户名 1.2.1 为计算机上的每个存储库设置 ...
最新文章
- SQLserver数据库操作帮助类SqlHelper
- 如何通过远程修改另一台电脑注册表
- HTC Element Behaviors in Internet Explorer.
- ACM模板--邻接表 无向图 Prim Kruskal Dijkstra
- python __init__ 构造函数
- 浏览器关闭 session并不会被干掉
- C++语言中std::array的神奇用法总结,你需要知道!
- C#实现外部图片的拖拽到应用程序的简单功能,附全部源码,供有需要的参考...
- Cesium中的常用坐标及转换
- redis cluster 分布式锁_Redis的分布式锁的实现原理
- 1036: [ZJOI2008]树的统计Count(树链剖分)
- 【捣鼓】TypeError: “x” is not a constructor
- 常见随机变量的数学期望和方差
- 打造一款可靠的WAF(Web应用防火墙)
- 10dayC语言项目 《后宫选妃》
- Python自动化爬取天眼查数据
- PC、手机老是掉线该如何排查?
- 工具类-随即获取姓名-ZH
- 【python】cholesky
- 最新最全论文合集——法律智能
热门文章
- 【最全】java面试题基础--完整汇总版
- win10搭建本地文件服务器,windows10本地服务器
- 计算机网络题库与答案--选择题
- 【王喆-推荐系统】评估篇-(task1)离线评估方法
- 开源Unity服务端客户端(双端C#)网络通讯框架(Lidgren)[一]
- 很哇塞的网页特效之摩天轮相册
- 个人简历管理系统(2)-数据库连接
- php请求lumen api,[laravel]如何用 lumen 构建 API
- Deep Back-Projection Networks For Super-Resolution
- 视频一键批量去重的方法与软件实现案例-咚咚剪辑