Sign_and_send_pubkey:不支持相互签名

박진근*_*박진근 137 ssh openssh

我尝试像这样在 M1 macOS 终端中连接到 ssh 服务器

ssh -i {myKeyFilePath/myKeyFile.pem} user@host
Run Code Online (Sandbox Code Playgroud)

但它返回

sign_and_send_pubkey: no mutual signature supported
user@host: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

我没有修改任何ssh设置,{myKeyFile.pem}的文件权限是400。我也可以通过IntelliJ远程主机很好地连接ssh服务器,但是当我在终端中尝试这个时,它出错了。

sho*_*aly 272

当我更新我的Mac系统时,所有的ssh服务器都无法使用私钥进行ssh,您可以在~/.ssh/config的开头添加以下3行。

但最好的解决方案是创建一个新的私钥并将公钥一一上传到每个服务器,因为当您收到此错误时,意味着您的私钥已不再使用。

# vim ~/.ssh/config, add the lines at the beginning
Host *
    PubkeyAcceptedKeyTypes=+ssh-rsa
    HostKeyAlgorithms=+ssh-rsa
Run Code Online (Sandbox Code Playgroud)

  • @JohnHanley 我刚刚花了 3 个小时试图弄清楚更新到 Mac Ventura 后发生了什么,这个答案有帮助。它被禁用的充分理由是什么?谢谢 (8认同)
  • 更新到 macOS Ventura 后,这对我们有用。谢谢!`PubkeyAcceptedKeyTypes=+ssh-rsa` 本身并不能解决问题。“HostKeyAlgorithms”也是必要的。 (8认同)
  • 禁用“ssh-rsa”有一个很好的安全原因。不建议选择此方法,并且应该是**最后的手段**。 (5认同)
  • 检查您的服务器 ssh 版本是否旧。我的客户端 ssh 是新的 - 9.0,带有 MacOS Ventura 升级。尝试在服务器上运行“ssh -V”。自 OpenSSH 8.8 起,不再支持签名类型 `ssh-rsa` (sha1),并替换为 `rsa-sha2-256` 或 `rsa-sha2-512`(2016 年在 OpenSSH 7.2 中添加)。因此,在服务器升级之前,客户端将需要使用 PubkeyAcceptedKeyTypes 将已弃用的“ssh-rsa”标记为允许。来源:https://superuser.com/questions/1734086/how-to-ssh-from-macos-terminal-to-ubuntu-22-04-no-matching-host-key-type-found https://www .openssh.com/txt/release-7.2 (2认同)

小智 57

我花了几个小时才找到这个问题和答案。ssh这是进入服务器的快速尝试,然后再处理这些内容:

ssh -o PubkeyAcceptedKeyTypes=ssh-rsa -i {yourfile} user@host
Run Code Online (Sandbox Code Playgroud)

这结合了shoalyJohn Hanley之前的答案,其中包含更多值得关注的细节和建议。


Joh*_*ley 50

您的 SSH 客户端很可能正在使用ssh-rsa(RSA+SHA1),并且您的服务器禁用了该签名算法。SHA-1 存在漏洞,OpenSSH 在版本 8.8 (2021-09-26) 中禁用了该签名算法。

ssh-rsa 的替代品是 rsa-sha2-256 和 rsa-sha2-512。

尝试这个命令:

ssh -o PubkeyAcceptedKeyTypes=rsa-sha2-256 -i {myKeyFilePath/myKeyFile.pem} user@host
Run Code Online (Sandbox Code Playgroud)

如果该命令失败并出现有关不支持的密钥交换的错误,那么您的 SSH 客户端可能是过时的。

使用以下解决方案之一:

  • 更新 SSH 客户端(通常是个好主意)
  • 使用不同的 SSH 密钥类型,例如 Ed25519(推荐)
  • 在 SSH 服务器中启用 rsa-sha(不推荐)

编辑:

如果有效,您可以将其永久添加到您的~/.ssh/config文件中,并从命令行使用中删除它。但是,有一个有效的安全原因导致 rsa-sha1 被禁用。仅在万不得已时才执行此操作,因为 SHA1 已被破坏。如果您的服务器经过安全审核或暴露于公共 Internet,请勿启用 rsa-sha1。

Host *
    PubkeyAcceptedKeyTypes +ssh-rsa
Run Code Online (Sandbox Code Playgroud)

替换*为特定主机或 IP 地址以限制此配置的使用。

  • 我尝试过 PubkeyAcceptedKeyTypes=+ssh-rsa 并且它有效!谢谢您的回答 (4认同)

小智 9

我在尝试使用 ssh 连接的 AWS EC2 上很长时间都收到此消息:

sign_and_send_pubkey: no mutual signature supported
Run Code Online (Sandbox Code Playgroud)

上面的代码救了我:

# vim ~/.ssh/config, add the lines at the beginning
Host *
    PubkeyAcceptedKeyTypes=+ssh-rsa
    HostKeyAlgorithms=+ssh-rsa
Run Code Online (Sandbox Code Playgroud)