【发布时间】: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中的源代码位置位于here,parseString函数的源代码位置是ParsePublicKey函数用来生成“短读" 错误,位于here,也在crypto/ssh。
【问题讨论】:
-
ParsePublicKey的文档说它以有线格式解析公钥,而不是 openssh 使用的磁盘格式。 -
不知道有多种格式,有没有办法转换成有线格式? @JimB
-
什么都不需要解析,id_rsa.pub 是的authorized_keys格式。大多数人只需将它们直接附加到 authorized_keys 文件即可将它们添加到 cli 中。
-
我试图将其转换为
ssh.PublicKey接口的原因是因为MarshalAuthorizedKey接受ssh.PublicKey接口并返回一个授权密钥,准备好附加到authorized_keys 文件。他们是否只有此功能可以将密钥恢复为磁盘上的格式? @JimB -
不,当您还没有 .pub 文件时,它们具有该功能。