sign_and_send_pubkey: no mutual signature supported

回答 4 浏览 1.1万 2022-09-21

我试着在M1的macOS终端连接到ssh服务器,像这样

ssh -i {myKeyFilePath/myKeyFile.pem} user@host

但它的返回结果是

sign_and_send_pubkey: no mutual signature supported
user@host: Permission denied (publickey).

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

박진근 提问于2022-09-21
当我升级到macOS Ventura时,肯定会发生在我身上,谢谢你的提问。pzrq 2022-11-05
4 个回答
#1楼
得票数 48

当我更新我的Mac系统时,所有的ssh服务器都不能用私钥进行ssh,你可以在你的/etc/.ssh/config的开头添加下面的3行。 但最好的解决办法是创建一个新的私钥,并将公钥逐一上传到每个服务器,因为当你得到这个错误时,意味着你的私钥已被废弃,无法使用。

# vim /etc/.ssh/config, add the lines at the beginning
Host *
    PubkeyAcceptedKeyTypes=+ssh-rsa
    HostKeyAlgorithms=+ssh-rsa
shoaly 提问于2022-10-31
shoaly 修改于2022-11-05
禁用ssh-rsa有一个很好的安全理由。不建议选择这种方法,应该是最后的手段John Hanley 2022-11-05
@JohnHanley 我刚刚花了3个小时试图弄清楚更新到Mac Ventura后的情况,这个答案帮助了我。是什么好的原因导致它被禁用? 谢谢你Eugene 2022-11-07
在更新到macOS Ventura后,这对我们很有效。谢谢!PubkeyAcceptedKeyTypes=+ssh-rsa本身并没有起到作用。HostKeyAlgorithms也是必要的。i-know-nothing 2022-11-07
@Eugene - 原因是SHA1自2016年以来被认为是不安全的,不应使用。computerworld.com/article/3173616/…John Hanley 2022-11-07
#2楼 已采纳
得票数 20

很可能你的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

如果该命令失败了,出现了不支持密钥交换的错误,那么你的SSH客户端可能已经过时了。

请使用以下解决方案之一。

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

编辑:

如果这样做了,你可以把它永久地添加到你的~/.ssh/config文件中,并从命令行使用中消除它。然而,禁用rsa-sha1有一个有效的安全理由。只有在不得已的情况下才这样做,因为SHA1已经被破坏了。如果你的服务器要接受安全审计或暴露在公共互联网上,请不要启用rsa-sha1。

Host *
    PubkeyAcceptedKeyTypes +ssh-rsa

用一个特定的主机或IP地址替换*,以限制该配置的使用。

John Hanley 提问于2022-09-23
John Hanley 修改于2022-11-14
我试过PubkeyAcceptedKeyTypes=+ssh-rsa,它起作用了!谢谢你的回答박진근 2022-09-29
你也可以把这个加到~/.ssh/config。我将编辑答案以显示这一部分。Tim Shadel 2022-11-14
@TimShadel - 如果SSH服务器禁用了rsa-sha1,那么在~/ssh/config中添加一些东西就不会有结果。在这种情况下,客户端必须支持rsa-sha2,这可以在~/.shh/config中进行配置。John Hanley 2022-11-14
@JohnHanley 这个公认的答案涉及到在命令行添加参数。你可以在命令行中添加的任何东西都可以进入SSH配置。我想你的争论可能是与答案本身有关。问题是,这个答案实际上是可行的。这对使用macOS的人来说尤其重要。有一个版本的SSH客户端有一个错误,没有向服务器提供这个选项,这就是随macOS出货的那个。Tim Shadel 2022-11-16
哎呀。我看到你的问题是关于confit(ssh-rsa与rsa-sha2-256)的content。我的推理仍然成立。macOS出厂时有一个bug,在最近的版本中已经修复,但macOS 13.0.1还没有接上,所以在那之前,我们需要用这种方法连接到完全没有变化的服务器。Tim Shadel 2022-11-16
#3楼
得票数 2

我花了几个小时,直到我来到这个问题和答案。这里是一个快速的尝试,ssh进入服务器,然后再处理这些东西。

ssh -o PubkeyAcceptedKeyTypes=ssh-rsa -i {yourfile} user@host

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

Mr.Key 提问于2022-12-19
#4楼
得票数 0

Mac系统升级到Ventura 13.1后,我遇到的问题是SSH配置了无密码登录,但仍然需要密码,我的解决办法是将服务器的密钥升级并加密为ed25519。

// 1. server: check HostKey in /etc/ssh/sshd_config
...
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

// 2. client: ssh-keygen -t ed25519
ssh-keygen -t ed25519

// 3. client: vim ~/.ssh/ssh_config
Host *
    IdentityFile ~/.ssh/id_ed25519

// 4. client: ssh-copy-id 
ssh-copy-id -i ~/.ssh/id_ed25519.pub

// 5. test ssh using identity file
ssh -v username@hostname

更多信息请见man sshd_config,搜索关键词HostKeyHostKeyAlgorithms

 HostKey
    Specifies a file containing a private host key used by SSH.  The defaults are /etc/ssh/ssh_host_ecdsa_key,
    /etc/ssh/ssh_host_ed25519_key and /etc/ssh/ssh_host_rsa_key.

    Note that sshd(8) will refuse to use a file if it is group/world-accessible and that the HostKeyAlgorithms
    option restricts which of the keys are actually used by sshd(8).
HostKeyAlgorithms
    Specifies the host key signature algorithms that the server offers.
lupguo 提问于2023-01-02
标签