我试图像这样连接到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 ~/.ssh/config, add the lines at the beginning
Host *
PubkeyAcceptedKeyTypes=+ssh-rsa
HostKeyAlgorithms=+ssh-rsa
很可能您的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
服务器然后稍后处理这些内容的快速尝试:
ssh -o PubkeyAcceptedKeyTypes=ssh-rsa -i {yourfile} user@host
这结合了shoaly和John Hanley之前的答案,其中包含更多值得遵循的细节和建议。
我在AWS EC2 上长时间收到此消息,尝试与 ssh 连接:
sign_and_send_pubkey: no mutual signature supported
上面的代码拯救了我:
# vim ~/.ssh/config, add the lines at the beginning
Host *
PubkeyAcceptedKeyTypes=+ssh-rsa
HostKeyAlgorithms=+ssh-rsa
Mac 系统升级到文图拉 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.
这是一个更新的安全设置,旨在推动您采用更安全的算法。如果可以将新密钥上传到目标主机,则不妨使用当前的最佳实践创建新密钥:
ssh-keygen -t ed25519 -a 100
然后,您需要将公钥~/.ssh/id_ed25519.pub
上传到服务器。
我正在本地PC上工作,此错误没有发生,但是当我部署到客户端(客户)的服务器时,我收到了此错误。
让我指导您什么有帮助。
首先找出您正在使用的 ssh 客户端版本:
ssh -V
在我的本地PC上,我得到OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
但在客户端的服务器上我得到OpenSSH_for_Windows_9.2p1, LibreSSL 3.7.2
现在,当我连接到远程 ssh 服务器时,我使用以下命令:
sftp -i ./files/keys/my_private_key.id_rsa -P 8092 GIL@1.1.1.1
从我的 PC 上,我连接没有任何错误,但在客户的服务器上,我收到此错误:
sign_and_send_pubkey: no mutual signature supported
GIL@1.1.1.1: Permission denied (publickey).
Connection closed
我还注意到,当我尝试使用 git bash 和上面的 sftp 连接命令从本地 pc 连接到 ssh 服务器时,我会收到此错误:
GIL@1.1.1.1: Permission denied (publickey).
Connection closed
Connection closed.
现在为了解决这个问题,我从客户的服务器上打开了位于C:UsersGIL.sshconfig
的配置文件,并在下面添加了两行:
Host *
PubkeyAcceptedKeyTypes +ssh-rsa
现在它起作用了。我没有重新启动在客户PC上运行的OpenSSH服务器。但是,我确实使用nodejs实现了另一个程序,我必须重新启动它才能连接到远程ssh服务器。
我没有尝试的另一件事是在客户的PC上安装较低版本的OpenSSH服务器。