crypto / ssh ParsePublicKey“短读”错误

问题描述 投票:1回答:1

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

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

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)。我确保文件正确传递到程序中。

我已经查看了源代码,希望调试这个“短读”错误,但我无法弄清楚发生了什么。 ParsePublicKeycrypto/ssh函数的源代码的位置位于hereparseString函数的源代码的位置,这是ParsePublicKey函数用于生成“短读”错误,位于here,也在crypto/ssh

go ssh key-pair
1个回答
2
投票

我认为这个问题的一些评论引导了这个,但函数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)
}
© www.soinside.com 2019 - 2024. All rights reserved.