dongsaohu6429
2017-12-29 00:45
浏览 86
已采纳

crypto / ssh ParsePublicKey“短读”错误

In a program I am developing I need a way to add public keys into the authorized_keys file during development, so I am using command line arguments to do so.

I have omitted most of the code, but if you would like to view all of the code, here is the repository, with the problem line being located in main.go on line 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)
}

The "short read" error comes from the ssh.ParsePublicKey function. The command line argument that I am passing in is the location of a public key to add to the authorized_keys file of this program (e.g. ~/.ssh/id_rsa.pub). I have ensured that the file is correctly being passed into the program.

I have looked at the source code in hopes of debugging this "short read" error, but I can't figure out what is going on. The location for source code of the ParsePublicKey function in crypto/ssh is located here, and the location of source code of the parseString function, which is what the ParsePublicKey function is using to generate the "short read" error, is located here, also in crypto/ssh.

图片转代码服务由CSDN问答提供 功能建议

在我正在开发的程序中,我需要一种在开发过程中将公共密钥添加到authorized_keys文件中的方法,

我已经省略了大部分代码,但是如果您想查看所有代码,请使用这是存储库,问题所在的行位于main.go的第20行。

  b,错误:= ioutil.ReadFile(os.Args [1])
if错误!= nil {
 log.Fatalf(“尝试读取新的公共密钥文件时发生致命错误:%s  “,err)
} 
 
newAuthorizedKey,err:= ssh.ParsePublicKey(b)
if err!= nil {
 log.Fatalf(”试图解析新的公钥的致命错误:%s“,err)  
} 
   
 
 

“短读”错误来自 ssh.ParsePublicKey 函数。 我要传递的命令行参数是要添加到该程序的authorized_keys文件中的公共密钥的位置(例如〜/ .ssh / id_rsa.pub )。 我确保文件已正确传递到程序中。

我已经查看了源代码,希望调试此“短读”错误,但我不知道 到底是怎么回事。 crypto / ssh ParsePublicKey 函数的源代码位置位于此处,以及 parseString 函数的源代码位置,即 ParsePublicKey 函数用于生成“短读”错误,位于此处,也在 crypto / ssh 中。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douzhang1955 2018-01-03 14:34
    已采纳

    I think some of the comments to the question lead at this, but the function ssh.ParseAuthorizedKey([]byte) is able to read interpret the file at ~/.ssh/id_rsa.pub.

    https://godoc.org/golang.org/x/crypto/ssh#ParseAuthorizedKey

    Your example should work like this:

    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)
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题