# SSH加密算法兼容性修复说明 ## 问题描述 连接老旧网络设备时出现以下错误: ``` failed to connect to 172.16.12.1:22: ssh: handshake failed: ssh: no common algorithm for client to server cipher; we offered: [aes128-gcm@openssh.com aes256-gcm@openssh.com chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr], peer offered: [aes128-cbc aes256-cbc 3des-cbc des-cbc] ``` ## 问题原因 现代SSH客户端(包括Go的crypto/ssh库)默认只支持安全的加密算法,如: - AES-GCM - ChaCha20-Poly1305 - AES-CTR 而老旧的网络设备(如早期的Cisco、华为交换机)只支持旧的加密算法: - AES-CBC - 3DES-CBC - DES-CBC 这导致双方无法协商出共同的加密算法,连接失败。 ## 解决方案 已在SSH客户端中添加了旧版加密算法支持,包括: ### 加密算法(Ciphers) - aes128-ctr, aes192-ctr, aes256-ctr - aes128-gcm@openssh.com, aes256-gcm@openssh.com - chacha20-poly1305@openssh.com - **aes128-cbc, aes256-cbc** (新增,用于兼容老旧设备) ### 密钥交换算法(KeyExchanges) - curve25519-sha256, curve25519-sha256@libssh.org - ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521 - diffie-hellman-group14-sha256, diffie-hellman-group16-sha512 - **diffie-hellman-group14-sha1, diffie-hellman-group1-sha1** (新增) ### MAC算法 - hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com - hmac-sha2-256, hmac-sha2-512 - **hmac-sha1, hmac-sha1-96** (新增) ## 使用方法 ### 方式一: 自动启用(推荐) 程序默认已启用旧版加密算法支持,无需额外配置。 在Web界面添加设备或扫描时,会自动尝试使用旧版算法连接老旧设备。 ### 方式二: 代码控制 如果需要控制是否启用旧版算法,可以在创建SSH客户端时设置: ```go client := sshclient.NewClient(sshclient.Config{ Host: "192.168.1.1", Username: "admin", Password: "password", InsecureCiphers: true, // 设置为true启用旧版算法 }) ``` ## 安全说明 ⚠️ **注意**: CBC等旧版加密算法存在已知的安全漏洞,仅建议在内网环境中使用。 ### 安全建议 1. **优先升级设备**: 如果可能,升级网络设备的SSH配置以支持现代加密算法 2. **网络隔离**: 在使用旧版算法的设备周围实施网络隔离 3. **访问控制**: 限制可以访问这些设备的IP地址 4. **监控日志**: 定期检查SSH连接日志,发现异常及时处理 ### Cisco设备升级示例 ```cisco ! 配置现代加密算法 ip ssh cipher encryption compatible aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com ip ssh cipher encryption mandatory aes128-gcm@openssh.com aes256-gcm@openssh.com ``` ### 华为设备升级示例 ```huawei # 配置SSH算法 ssh server cipher aes256_gcm aes128_gcm aes256_ctr aes128_ctr ssh server hmac sha2_256 sha2_512 ssh server key-exchange diffie-hellman-group14-sha256 ``` ## 测试验证 修复后,可以成功连接以下类型的设备: ✅ Cisco IOS 12.x (老旧版本) ✅ 华为 VRP 3.x/5.x ✅ H3C Comware V3/V5 ✅ 其他使用旧版SSH的设备 ## 相关文件 - `internal/ssh/client.go` - SSH客户端实现 - `internal/device/parser.go` - 设备发现逻辑 ## 更新日期 2026-04-25