当前位置: 首页 > news >正文

Golang SSH握手过程中,报错跟客户端在算法签名上不匹配

场景:

go中编写了一个监听socket,等待客户端连接,客户端连接成功后,利用(复用)这个socket已知的socket做SSH安全认证,认证方式为用户名密码认证,报错如下:

handshake failed: ssh: invalid signature algorithm "rsa-sha2-512", expected "rsa-sha2-256"

报错原因:

出现错误的原因是 SSH 握手过程中服务器和客户端在签名算法上不匹配。具体来说,服务器支持的签名算法是 rsa-sha2-512,而客户端(Go 程序)期望的是 rsa-sha2-256。这导致了握手失败。

Note: 注意这时候是使用已经建立连接的socket做SSH认证,所以Go程序相当于客户端,而服务器相当于服务端。

问题分析:

SSH 协议在建立连接时会进行一个握手过程,其中包括验证服务器的公钥。在较新的 SSH 实现中,rsa-sha2-512rsa-sha2-256 是常见的签名算法。如果客户端和服务器在这些算法上不匹配,就会导致握手失败。

解决办法:

  1. 确保golang.org/x/crypto/ssh支持该签名算法
  2. 可以在 ClientConfig 中显式指定支持的签名算法来解决这个问题
config := &ssh.ClientConfig{User: "root",Auth: []ssh.AuthMethod{ssh.Password(password),},HostKeyCallback: ssh.InsecureIgnoreHostKey(),// 显式指定支持的签名算法HostKeyAlgorithms: []string{"rsa-sha2-512", "rsa-sha2-256"},}
  • HostKeyAlgorithms:在 ClientConfig 中添加了 HostKeyAlgorithms 字段,显式指定支持的签名算法。这里添加了 rsa-sha2-512rsa-sha2-256,以确保客户端可以接受服务器使用的签名算法。

  • HostKeyAlgorithms:这个字段用于指定客户端支持的主机密钥算法。默认情况下,Go 的 SSH 客户端可能只支持某些特定的算法。通过显式指定支持的算法,可以确保客户端和服务器之间的兼容性。

http://www.dtcms.com/a/244382.html

相关文章:

  • 无IT审计经验,通过 CISA 考试
  • 打卡Day51
  • force命令的使用
  • 青藏高原地区多源融合降水数据(1998-2017)
  • 【Unity3D优化】优化多语言字体包大小
  • NuGet 从入门到精进全解析
  • Transformers KV Caching 图解
  • h5fortran 简介与使用指南
  • vue前端面试题——记录一次面试当中遇到的题(1)
  • 冒险岛的魔法果实-多重背包
  • 关于有害的过度使用 std::move
  • SCADA|测试KingSCADA4.0信创版采集汇川PLC AC810数据
  • python学习打卡day50
  • A. Dr. TC
  • RPG24.设置武器伤害(二):将效果应用于目标
  • RabbitMQ可靠和延迟队列
  • 接收rabbitmq消息
  • 中心化交易所(CEX)架构:高并发撮合引擎与合规安全体系
  • [蓝桥杯 2024 国 Python B] 设计
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十四)
  • Arduino入门教程:1、Arduino硬件介绍
  • LAN、WAN、WLAN、VLAN 、VPN对比
  • Java异步编程深度解析:从基础到复杂场景的难题拆解
  • 动态多目标进化算法:VARE(Vector Autoregressive Evolution)求解DF1-DF14,提供完整MATLAB代码
  • [服务器] Amazon Lightsail SSH连接黑屏的常见原因及解决方案
  • 曼昆《经济学原理》第九版 第十七章寡头垄断
  • 【leetcode】36. 有效的数独
  • 【Axure高保真原型】中继器表格更多操作
  • API:解锁数字化协作的钥匙及开放实现路径深度剖析
  • 产品升级 | 新一代高性能数据采集平台BRICK2 X11,助力ADAS与自动驾驶开发