答案1
经过一番谷歌搜索,我在其他相关错误中找到了答案: SSH 不断跳过我的公钥并要求输入密码
新的 openssh 版本 (7.0+) 已弃用 DSA 密钥,并且默认情况下不使用 DSA 密钥(不在服务器或客户端上)。不希望再使用这些密钥,因此如果可以的话,我建议尽可能使用 RSA 密钥。
如果您确实需要使用 DSA 密钥,则需要使用以下命令在客户端配置中显式允许它们
PubkeyAcceptedKeyTypes +ssh-dss
应该足以将该行放入 ~/.ssh/config 中,因为详细消息试图告诉您。
谢谢杰库耶
附录:可以在 /etc/ssh/ssh_config 中添加这一行,但在最后,在 Include 之后,仍然可以工作。
答案2
看起来您正在使用 DSA SSH 密钥,而现代版本的 OpenSSH 默认情况下不支持这些密钥,因为它们不安全。原因如下:
- OpenSSH 中使用的 DSA 密钥仅限于 1024 位。对于此类算法,这相当于 80 位安全级别,而目前可接受的最低安全级别是 128 位。
- DSA 密钥只能使用不安全的 SHA-1 算法进行签名。众所周知,SHA-1 非常弱,仅提供 61 位安全性,因此不应再使用它。它非常弱,任何报酬合理的软件开发人员都有能力攻击 SHA-1。
您最好的选择是使用如下所示的内容生成新密钥:
$ ssh-keygen -t ed25519
Ed25519 密钥被认为是目前最好的选择,Mozilla 向所有开发人员推荐。也可以使用 RSA 密钥,但它们的大小应至少为 3072 位,并且您必须通过添加PubkeyAcceptedTypes -ssh-rsa
.除非您确定自己知道自己在做什么或者有迫切的需求,否则 Ed25519 密钥是最佳选择。
请注意,Bitbucket 本身不提供任何安全主机密钥算法(仅基于 SHA-1 的算法),因此如果您使用 Bitbucket,最好使用 HTTPS。