在我正在开发的程序中,我需要一种方法在开发过程中将公钥添加到authorized_keys文件中,因此我使用命令行参数来实现。我省略了大部分代码,但如果您想查看所有代码,这里是存储库,问题行位于main.go的第20行。
"short read" 错误来自于`ssh.ParsePublicKey`函数。我传入的命令行参数是需要添加到这个程序的authorized_keys文件中的公钥的位置(例如`~/.ssh/id_rsa.pub`)。我已经确保该文件被正确传递到程序中。
我研究了源代码,希望调试这个"short read"错误,但是我无法理解发生了什么。 `crypto/ssh` 中 `ParsePublicKey` 函数的源代码位置在这里,而`ParsePublicKey`函数使用的`parseString`函数生成了"short read"错误,它的源代码位置在这里,也在`crypto/ssh`中。
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)
}
"short read" 错误来自于`ssh.ParsePublicKey`函数。我传入的命令行参数是需要添加到这个程序的authorized_keys文件中的公钥的位置(例如`~/.ssh/id_rsa.pub`)。我已经确保该文件被正确传递到程序中。
我研究了源代码,希望调试这个"short read"错误,但是我无法理解发生了什么。 `crypto/ssh` 中 `ParsePublicKey` 函数的源代码位置在这里,而`ParsePublicKey`函数使用的`parseString`函数生成了"short read"错误,它的源代码位置在这里,也在`crypto/ssh`中。
ParsePublicKey
的文档说明它解析的是以线格式存储的公钥,而不是 openssh 使用的磁盘格式。 - JimBssh.PublicKey
接口的原因是因为MarshalAuthorizedKey
接受一个ssh.PublicKey
接口并返回一个准备附加到authorized_keys文件的授权密钥。他们只有这个函数是为了将密钥恢复为磁盘上的格式吗?@JimB - George Edward Shaw IV