登录
首页 >  Golang >  Go问答

SSH: 在 Golang 中处理公钥解析时的短读取错误

来源:stackoverflow

时间:2024-02-25 19:57:24 141浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《SSH: 在 Golang 中处理公钥解析时的短读取错误》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在尝试使用 gossh 库解析公钥,如下所示:

var testpublickey = `ssh-rsa aaaab3nzac1yc...dedfu= pkaramol@macbookpro`


pubkey, err := ssh.parsepublickey(([]byte(testpublickey)))
if err != nil {
  log.fatal(err)
}

但我收到以下错误:

ssh: short read

我知道这个问题,但它解决了另一个问题(从文件中读取公钥并加载到授权密钥列表)

我的目标是最终得到一个用于此函数的 *rsa.publickey 类型。


解决方案


密钥的有线格式和磁盘格式之间存在差异。来自文档:

parsepublickey 根据 rfc 4253 解析格式化用于 ssh 有线协议的 ssh 公钥

因此您需要将其编组为有线格式。

package main

import (
    "log"

    "golang.org/x/crypto/ssh"
)

func parse(in []byte) error {
    // ParseAuthorizedKeys parses a public key from an authorized_keys file used in OpenSSH
    pk, _, _, _, err := ssh.ParseAuthorizedKey(in)
    if err != nil {
        return err
    }
    // pk.Marshal() Marshal returns the serialized key data in SSH wire format, with the name prefix
    // ssh.ParsePublicKey is used to unmarshal the returned data
    res, err := ssh.ParsePublicKey(pk.Marshal())
    if err != nil {
        return err
    }
    log.Println(res)
    return nil

}

func main() {
    key := "ssh-rsa AAAAB3NzaC1yc...DEdfU= pkaramol@MacBookPro"
    if err := parse([]byte(key)); err != nil {
        log.Println(err)
    }
}

本篇关于《SSH: 在 Golang 中处理公钥解析时的短读取错误》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>