你遇到的这个问题是因为你的本地 SSH 客户端版本较新,默认不再支持服务器提供的
ssh-rsa 和 spki-sign-rsa 这类旧的主机密钥类型,导致双方无法协商出兼容的加密方式。解决方案
你有两种方式可以解决这个问题,推荐优先使用临时方案测试,确认可行后再考虑永久配置。
方案 1:临时连接(单次生效)
直接在 SSH 命令中指定允许使用
ssh-rsa 密钥类型:bash
运行
ssh -o HostKeyAlgorithms=+ssh-rsa 192.168.1.2
如果需要指定用户名(比如用户名是
root),可以这样写:bash
运行
ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.1.2
方案 2:永久配置(长期生效)
修改 SSH 的配置文件,让客户端默认兼容旧的密钥类型,避免每次都加参数:
- 编辑 SSH 客户端配置文件(如果文件不存在则新建):bash运行
vi ~/.ssh/config - 添加以下内容(可以针对单个服务器或所有服务器配置):config
# 仅对192.168.1.2生效(推荐) Host 192.168.1.2 HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa # 对所有服务器生效(不推荐,仅临时测试用) # Host * # HostKeyAlgorithms +ssh-rsa # PubkeyAcceptedKeyTypes +ssh-rsa - 保存退出(vi 编辑器中按
ESC后输入:wq)。 - 赋予配置文件正确的权限(避免 SSH 报错):bash运行
chmod 600 ~/.ssh/config - 之后直接执行
ssh 192.168.1.2即可正常连接。
关键参数解释
HostKeyAlgorithms=+ssh-rsa:表示在客户端支持的密钥类型列表中追加ssh-rsa类型(+号避免覆盖其他默认支持的类型)。PubkeyAcceptedKeyTypes +ssh-rsa:额外配置公钥认证的密钥类型,防止后续登录时出现类似的公钥不兼容问题。- 配置文件权限
600:SSH 对配置文件的权限要求严格,必须确保只有当前用户可读写,否则会被拒绝使用。
总结
- 核心问题:新版 SSH 客户端默认禁用了旧的
ssh-rsa密钥类型,与服务器不兼容。 - 临时解决:连接时添加
-o HostKeyAlgorithms=+ssh-rsa参数。 - 永久解决:修改
~/.ssh/config文件,为目标服务器添加兼容配置,并确保文件权限为600。