FAIL : SSHException: Incompatible ssh peer (no acceptable kex algorithm)

问题描述:
在安装greenplum,执行gpssh-exkeys过程中抛出异常

 Incompatible ssh peer (no acceptable kex algorithm)

原因:
由于ssh 6.7以上屏蔽不安全算法

解决:
在/etc/ssh/sshd_config最后加上

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

重启ssh
service sshd restart
问题解决。

### 问题分析 当使用 Paramiko 进行 SSH 连接时,如果遇到 `Incompatible ssh peer (no acceptable host key)` 或类似的错误消息,通常是因为客户端和服务器之间的密钥交换算法(KEX algorithms)、MAC 算法或主机密钥类型不匹配。 以下是可能的原因以及解决方案: --- ### 可能原因及解决办法 #### 原因一:SSH 协议版本不一致 Paramiko 默认支持的是较新的加密协议标准,而某些旧版的 SSH 服务端可能会使用过时的 KEX 算法或 MAC 算法。这可能导致双方无法协商合适的参数。 **解决方法**: 可以通过修改 Paramiko 的配置来允许更多的 KEX 和 MAC 算法选项。例如,在初始化 SSH 客户端之前设置自定义策略[^2]。 ```python import paramiko transport = paramiko.Transport(("hostname", 22)) transport.get_security_options().kex += ('diffie-hellman-group1-sha1',) client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect("hostname", username="username", password="password") ``` 上述代码通过扩展默认的安全选项列表,增加了对旧版 Diffie-Hellman 密钥交换的支持。 --- #### 原因二:缺少兼容的 Host Key 类型 `Incompatible ssh peer (no acceptable host key)` 错误也可能由于服务器使用的主机密钥类型未被 Paramiko 支持所致。常见的主机密钥类型包括 RSA、DSA、ECDSA 和 ED25519。 **解决方法**: 可以尝试更新 Paramiko 到最新版本,因为新版本会增加对更多现代加密技术的支持[^3]。或者手动指定可接受的主机密钥类型。 ```python from paramiko import SSHClient, AutoAddPolicy client = SSHClient() client.set_missing_host_key_policy(AutoAddPolicy()) # 显式声明支持的主机密钥类型 host_keys = client.get_host_keys() if not host_keys.lookup('hostname'): host_keys.add('hostname', 'ssh-rsa', paramiko.RSAKey.generate(2048)) client.connect("hostname", username="username", password="password") ``` 此代码片段强制启用了对 RSA 主机密钥的支持。 --- #### 原因三:SSH 配置文件中的限制 有时,目标 Linux 服务器上的 `/etc/ssh/sshd_config` 文件中可能存在严格的加密配置,禁用了部分老旧但仍然广泛使用的算法。 **解决方法**: 检查并调整服务器侧的 SSH 配置文件以放宽限制。编辑 `/etc/ssh/sshd_config` 并确保以下字段包含必要的条目[^4]: ```plaintext KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha256 HostKey /etc/ssh/ssh_host_rsa_key Ciphers aes128-cbc,aes192-cbc,aes256-cbc MACs hmac-md5,hmac-sha1 ``` 完成更改后重启 SSH 服务: ```bash sudo systemctl restart sshd ``` --- #### 原因四:软件版本差异过大 如果本地 Python 版本或 Paramiko 库版本较低,则可能出现与远程服务器不兼容的情况。 **解决方法**: 升级到最新的 Paramiko 版本,并确认其依赖项已正确安装。 ```bash pip install --upgrade paramiko cryptography ``` 此外,验证所用的 OpenSSH 客户端和服务端版本是否处于合理范围内[^5]。 --- ### 总结 以上提供了多种针对不同场景下的解决方案。具体实施时需结合实际环境逐一排查。优先考虑调整 Paramiko 参数而非降低服务器安全性;只有在必要情况下才应修改服务器配置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值