gitee ssh 抽风了嘛

2021-10-16 23:46:31 +08:00
Wanerlove  Wanerlove

上个月还好好的,今天 push 一下提示 ssh 无权限

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 还能正常使用嘛

3109 次点击
所在节点   程序员  程序员
17 条回复
proxychains
proxychains
2021-10-17 00:08:55 +08:00
我配置了多私钥,vps,github 都能用,gitee 一直 permission denied (public key)
离谱
Wanerlove
Wanerlove
2021-10-17 00:13:15 +08:00
@proxychains gitee 确实辣鸡,同样的这对公私钥,push 到 GitHub 上就能用,我真是想不通
chengfeng
chengfeng
2021-10-17 00:25:58 +08:00
好像是 openssh 默认不支持 rsa 算法了,可以在 config 文件中加上

PubkeyAcceptedKeyTypes +ssh-rsa

但我不知道为什么 github 没问题,就 gitee 抽风,今天也是被这个恶心了好久

ssh -vT git@gitee.com

可以看到
debug1: Offering public key: (none) RSA SHA256:...k agent
debug1: send_pubkey_test: no mutual signature algorithm
Y29tL2gwd2Fy
Y29tL2gwd2Fy
2021-10-17 05:37:02 +08:00
国产巅峰 gitcafe 之后再也不想用国内的 git 服务了
是不是暴露年龄了。。。
RangerWolf
RangerWolf
2021-10-17 10:42:24 +08:00
@Y29tL2gwd2Fy 是 因为我也知道 gitcafe ...
skiy
skiy
2021-10-17 14:09:18 +08:00
@Y29tL2gwd2Fy 可以尝试 GITLAB 技术入股的极狐 https://gitlab.cn ,不过还得再等一两个月。(我已经申请内测成功了,嘿嘿)
skiy
skiy
2021-10-17 14:16:15 +08:00
自从上次 README 和 描述中那些正常的中文信息被定义为“非法” 之后,我一直在找国内的替代品,终于等来了 gitlab.cn 。打算以后都将迁移过来了。目前还没公测。社交这块也没做得很好。

在此期间用过 gitea.com (现在限制只能 5 个仓库数了)、工峰、云效和 CODING 。都是社交方面做得不是很好,比如“优秀的项目推荐”,不容易发现优秀的项目。

另外,楼主的这种情况我在 gitee 见过,不用处理也解决了。云效这边见过,最后解决方案我记下来了。

只要在 .ssh/config 添加,即可解决:

Host *
PubkeyAcceptedKeyTypes=+ssh-dss
proxychains
proxychains
2021-10-17 15:05:45 +08:00
@chengfeng newbee,gitee 能用了.感谢大佬
Wanerlove
Wanerlove
2021-10-17 15:15:10 +08:00
@skiy 好的,非常感谢
Kobayashi
Kobayashi
2021-10-17 17:27:27 +08:00
@chengfeng 基本是正确的。严格来说不是 RSA 被废弃,RSA 公钥仍然安全,废弃的只是认证过程中的 ssh-rsa 签名格式,或者说哈希算法。

自从 OpenSSH 7.2,rsa-sha2-* 取代 ssh-rsa 作为默认的 ssh host key algorithm 签名算法。8.2 时通知 ssh-rsa 之后将废弃,8.8 正式废弃了 ssh-rsa.

https://security.stackexchange.com/a/226133/203193
> The RFC8332 RSA SHA-2 signature algorithms rsa-sha2-256/512. **These algorithms have the advantage of using the same key type as "ssh-rsa" but use the safe SHA-2 hash algorithms.** These have been supported since OpenSSH 7.2 and are already used by default if the client and server support them.

另外影响的只是 ssh-rsa hash 算法格式,RSA 公钥(即 id_rsa 文件)仍然使用 ssh-rsa 格式。 因为 RSA 公钥不依赖 hash 函数。

https://www.ietf.org/rfc/rfc8332.txt
> Since RSA keys are not dependent on the choice of hash function, the new public key algorithms reuse the "ssh-rsa" public key format as
defined in [RFC4253]:

https://superuser.com/a/1488613/733022
> RSA keys themselves are neither "SHA1" nor "SHA2" - the key format doesn't involve any hash algorithm at all. The private key just consists of two large numbers, and unlike certificates, there is no attached signature.

https://superuser.com/a/1556861/733022
> The key format has not changed. The only thing that changes is the signature format that's sent during each authentication handshake.

---

回归原问题,OpenSSH 8.8 客户端默认不提供 ssh-rsa hash function,而远端服务端不接受非 ssh-rsa 外的 rsa-sha2-*. 协商失败。

目前已知受影响的有 gitee.com, bitbucket.org.

测试方法: ssh -T git@gitee.com -vv 或者 ssh -T git@bitbucket.org. -vv 开启 debug2 级别日志。在结果中检索 'host key algorithms',注意有 2 条匹配,一条客户端的,一条服务端的。

gitee: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ssh-ed25519. OpenSSH 服务端没有支持 rsa-sha2-*.
bitbucket 就更狠了: ssh-rsa,ssh-dss. 根本就不支持任何椭圆曲线签名算法。
Rache1
2021-10-17 17:46:38 +08:00
gitee 比 github 还离谱,老是 push 或者 pull 超时,测试机是 HK 的,有时候拉代码完全听天由命
Kobayashi
2021-10-17 18:08:18 +08:00
更正:

- bitbucket 还需要指定 HostKeyAlgorithms +ssh-rsa
- 另外上条回复末尾 bitbucket 不支持椭圆曲线应该是错误的,不能只依据 host key algorithms 判断
Wanerlove
2021-10-17 22:25:27 +08:00
@Kobayashi 受教了,那么我 .ssh/config 文件写入以下内容就可以吗

Host gitee.com
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa

还有什么需要修改的,请再指教一下
knightdf
2021-10-18 08:47:14 +08:00
gitee 这垃圾有用的必要?
forcecharlie
2021-10-18 14:29:47 +08:00
gitee 的 SSH 服务使用 Golang 开发,Golang crypto/ssh 没有支持 rsa-sha2-256 rsa-sha2-512 结果就是 openssh 8.8 无法协商,另外 Golang SSH 还不支持 server-sig-algs 扩展,要解决得同时解决两个问题,CODING 也有这个问题,还有 Gitea,都在等 crypto/ssh 的跟进: https://github.com/golang/go/issues/37278

Github 可能是依然是用的 libssh,但深度定制了。

其中 maxmanuylov 的 fork 是验证可用的: https://github.com/maxmanuylov/crypto/commit/e400208a17e0c73cc54ae5ef8091b060bcd06d21

利益相关:Gitee 前员工,SSH 服务器开发者,CODING 前员工。
qq1340691923
2021-10-19 09:41:52 +08:00
@forcecharlie 大佬
cco
2021-10-19 14:35:05 +08:00
gitee coding 经常遇到这问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808281

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX