SSH连接错误:no matching host key type found. Their offer: ssh-rsa
问题描述
在使用Git或SSH连接远程仓库时,你可能会遇到以下错误信息:
bash
$ git pull
Unable to negotiate with 172.16.42.42 port 22: no matching host key type found. Their offer: ssh-rsa
fatal: Could not read from remote repository.
这个错误通常发生在较新版本的OpenSSH客户端(8.2及以上版本)尝试连接仅支持传统ssh-rsa
算法的主机时。
错误原因
OpenSSH在2020年发布的8.2版本中出于安全考虑,默认禁用了ssh-rsa
签名算法,因为它使用不安全的SHA-1哈希算法。但许多远程服务器(尤其是Azure DevOps等平台)仍然仅支持这种较旧的算法,导致客户端和服务器无法协商出共同支持的主机密钥类型。
安全提醒
虽然本文提供解决方案,但请注意ssh-rsa
算法确实存在安全风险。建议优先考虑使用HTTPS协议或敦促服务提供商升级到更安全的算法。
解决方案
方法一:修改SSH客户端配置(推荐)
在~/.ssh/config
文件中添加特定主机的配置:
ssh-config
Host ssh.dev.azure.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
# 对于Azure DevOps的额外配置
Host vs-ssh.visualstudio.com
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
其他常见平台配置
ssh-config
# 对于Bitbucket
Host bitbucket.org
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
# 自定义服务器
Host your-server-domain.com
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
方法二:临时命令行解决方案
对于一次性连接,可以直接在命令行中指定算法:
bash
# SSH连接
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@hostname
# SCP传输文件
scp -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa file user@hostname:path
# Git操作(设置临时环境变量)
GIT_SSH_COMMAND="ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa" git pull
方法三:系统级配置(适用于特定环境)
在某些情况下,可能需要修改系统级SSH配置:
- macOS系统:编辑
/etc/ssh/ssh_config
文件 - Linux系统(如Ubuntu):编辑
/etc/ssh/sshd_config
文件 - NixOS系统:在
configuration.nix
中添加:nixprograms.ssh.extraConfig = '' PubkeyAcceptedAlgorithms +ssh-rsa HostkeyAlgorithms +ssh-rsa '';
配置详解
ssh-config
Host example.com
HostName example.com # 实际主机名
User your-username # 登录用户名
IdentityFile ~/.ssh/id_rsa # 私钥文件路径
IdentitiesOnly yes # 仅使用指定身份文件
PubkeyAcceptedAlgorithms +ssh-rsa # 启用ssh-rsa公钥算法
HostkeyAlgorithms +ssh-rsa # 启用ssh-rsa主机密钥算法
bash
# 测试SSH连接
ssh -T git@ssh.dev.azure.com
# 检查配置是否生效
ssh -G ssh.dev.azure.com | grep -E "(hostkey|pubkey)"
创建SSH配置文件
如果还没有SSH配置文件,可以按以下步骤创建:
- 打开终端
- 进入SSH目录:
cd ~/.ssh/
- 创建配置文件:
touch config
- 编辑配置文件:
nano config
(或使用其他文本编辑器) - 添加相应的配置内容并保存
安全建议
- 优先使用HTTPS:如果服务支持,考虑使用HTTPS协议代替SSH
- 督促服务商升级:联系你的Git服务提供商(如Azure DevOps),要求他们支持更安全的密钥算法(如
rsa-sha2-256
或ed25519
) - 定期更新:关注服务商的安全更新,一旦支持更安全的算法,立即移除临时配置
总结
"no matching host key type found"错误是由于OpenSSH客户端安全升级导致的兼容性问题。通过修改SSH配置可以临时解决此问题,但长期来看应该推动服务提供商升级到更安全的加密算法。
注意
不同平台和OpenSSH版本可能有细微差异,如果上述方法无效,请检查你的SSH版本(ssh -V
)并查阅相关平台的特定文档。