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

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.xdnf.cn/news/13720.html

相关文章:

  • 3-16单元格区域尺寸调整(发货单记录保存-方法2)学习笔记
  • 金蝶云星空·旗舰版与领星:赋能跨境电商的业财一体化解决方案
  • 麒麟系统自定义快捷键关机
  • day6补 cpp:c++输入输出流,流的四种状态,标准输入输出流
  • DeepSpeed 是一个深度学习优化库,使分布式训练和推理变得简单、高效和有效
  • 黑马python(五)
  • Java项目:基于SSM框架实现的劳务外包管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 芯片金属层M1、M2区别
  • 一站式二维码解决方案:解析其生成+解码+个性化定制的技术实现路径
  • 【Dv3Admin】系统视图用户登录API文件解析
  • 【Axure高保真原型】中继器表格更多操作
  • C#winform多选框代码
  • 现代数据工程实践:基于Dagster的ETL架构设计与实现
  • 进程信号之sigaction系统调用
  • 【技术支持】Android11 中获取应用列表
  • 商城系统源码加密与不加密(开源)的区别
  • JavaEE-Maven
  • 多线程应用
  • Project Reactor响应式编程简介
  • 初识 Redis:从入门到应用的全面指南
  • 数字化动态ID随机水印和ID跑马灯实现教育视频防录屏
  • 数据治理域——离线数据开发
  • Codeforces 2025/6/11 日志
  • 项目练习:使用mybatis的foreach标签,实现union all的拼接语句
  • Nacos快速入门:从安装到实战
  • MySQL 8.0 OCP 英文题库解析(十七)
  • 打砖块(洛谷)
  • 移动端 1px 问题解决方案
  • 从字节到对象的漂流---JavaIO流篇
  • 5. 相机拍摄简单构图