crypto / ssh ParsePublicKey“短读”错误

时间:2017-12-29 00:45:44

标签: go ssh key-pair

在我正在开发的程序中,我需要一种在开发期间将公钥添加到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

1 个答案:

答案 0 :(得分: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)
}