【问题标题】:crypto/ssh ParsePublicKey "short read" errorcrypto/ssh ParsePublicKey“短读”错误
【发布时间】:2018-06-09 12:16:50
【问题描述】:

在我正在开发的程序中,我需要一种在开发过程中将公钥添加到 authorized_keys 文件中的方法,因此我使用命令行参数来执行此操作。

我省略了大部分代码,但如果您想查看所有代码,here is the repository,问题行位于 main.go 的第 20 行。

b, err := ioutil.ReadFile(os.Args[1])
if err != nil {
    log.Fatalf("Fatal error trying to read new public key file: %s", err)
}

newAuthorizedKey, err := ssh.ParsePublicKey(b)
if err != nil {
    log.Fatalf("Fatal error trying to parse new public key: %s", err)
}

“短读”错误来自ssh.ParsePublicKey 函数。我传入的命令行参数是要添加到该程序的 authorized_keys 文件中的公钥的位置(例如~/.ssh/id_rsa.pub)。我已经确保文件被正确地传递到程序中。

我查看了源代码,希望能调试这个“短读”错误,但我不知道发生了什么。 ParsePublicKey函数在crypto/ssh中的源代码位置位于hereparseString函数的源代码位置是ParsePublicKey函数用来生成“短读" 错误,位于here,也在crypto/ssh

【问题讨论】:

  • ParsePublicKey 的文档说它以有线格式解析公钥,而不是 openssh 使用的磁盘格式。
  • 不知道有多种格式,有没有办法转换成有线格式? @JimB
  • 什么都不需要解析,id_rsa.pub 的authorized_keys格式。大多数人只需将它们直接附加到 authorized_keys 文件即可将它们添加到 cli 中。
  • 我试图将其转换为ssh.PublicKey 接口的原因是因为MarshalAuthorizedKey 接受ssh.PublicKey 接口并返回一个授权密钥,准备好附加到authorized_keys 文件。他们是否只有此功能可以将密钥恢复为磁盘上的格式? @JimB
  • 不,当您还没有 .pub 文件时,它们具有该功能。

标签: go ssh key-pair


【解决方案1】:

我认为这个问题的一些 cmets 导致了这个问题,但函数 ssh.ParseAuthorizedKey([]byte) 能够读取 ~/.ssh/id_rsa.pub 处的文件。

https://godoc.org/golang.org/x/crypto/ssh#ParseAuthorizedKey

你的例子应该是这样的:

b, err := ioutil.ReadFile(os.Args[1])
if err != nil {
    log.Fatalf("Fatal error trying to read new public key file: %s", err)
}

newAuthorizedKey, _, _, _, err := ssh.ParseAuthorizedKey(b)
if err != nil {
    log.Fatalf("Fatal error trying to parse new public key: %s", err)
}

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 2020-09-25
    • 1970-01-01
    • 2017-10-05
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2020-10-01
    相关资源
    最近更新 更多