sign_and_send_pubkey: no mutual signature supported
我试着在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服务器,但当我在终端尝试时,它出了问题。
当我更新我的Mac系统时,所有的ssh服务器都不能用私钥进行ssh,你可以在你的/etc/.ssh/config的开头添加下面的3行。 但最好的解决办法是创建一个新的私钥,并将公钥逐一上传到每个服务器,因为当你得到这个错误时,意味着你的私钥已被废弃,无法使用。
# vim /etc/.ssh/config, add the lines at the beginning
Host *
PubkeyAcceptedKeyTypes=+ssh-rsa
HostKeyAlgorithms=+ssh-rsa
ssh-rsa
有一个很好的安全理由。不建议选择这种方法,应该是最后的手段。
- John Hanley 2022-11-05
PubkeyAcceptedKeyTypes=+ssh-rsa
本身并没有起到作用。HostKeyAlgorithms
也是必要的。
- i-know-nothing 2022-11-07
很可能你的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地址替换*
,以限制该配置的使用。
~/.ssh/config
。我将编辑答案以显示这一部分。
- Tim Shadel 2022-11-14
rsa-sha1
,那么在~/ssh/config
中添加一些东西就不会有结果。在这种情况下,客户端必须支持rsa-sha2
,这可以在~/.shh/config
中进行配置。
- John Hanley 2022-11-14
我花了几个小时,直到我来到这个问题和答案。这里是一个快速的尝试,ssh
进入服务器,然后再处理这些东西。
ssh -o PubkeyAcceptedKeyTypes=ssh-rsa -i {yourfile} user@host
这结合了之前shoaly和John Hanley的回答,其中包含了更多的细节和建议,值得关注一下。
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
,搜索关键词HostKey
和HostKeyAlgorithms
。
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.