当前位置: 首页 > 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 客户端可能只支持某些特定的算法。通过显式指定支持的算法,可以确保客户端和服务器之间的兼容性。

相关文章:

  • 无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:畅游济南旅行规划助手:个人工作纪实(二十四)
  • 招聘网站html模板/网站推广途径
  • 网站做302重定向会怎么样/seochan是什么意思
  • 徐州做网站多少钱/外贸营销网站建设介绍
  • 有什么网站用名字做图片/百度推广是做什么的
  • 北京高端网站建设飞沐/国内新闻最近新闻今天
  • 购物网站开发需求文档/手机360优化大师官网