在我正在开发的程序中,我需要一种在开发期间将公钥添加到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
)。我确保文件正确传递到程序中。
我已经查看了源代码,希望调试这个“短读”错误,但我无法弄清楚发生了什么。 ParsePublicKey
中crypto/ssh
函数源代码的位置位于here,parseString
函数的源代码位置是ParsePublicKey
的位置函数用于生成“短读”错误,位于here,也位于crypto/ssh
。
答案 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)
}