2017-12-29 44 views
0

開発中のプログラムでは、開発中にauthorized_keysファイルに公開鍵を追加する方法が必要なので、コマンドライン引数を使用しています。crypto/ssh ParsePublicKey "short read"エラー

あなたはすべてのコードを表示したい場合、私は「短い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) 
} 

ライン上main.goに位置している問題のあるラインで、here is the repository、コードの大部分を省略しますが、しています読み取り "エラーはssh.ParsePublicKey関数から発生します。渡しているコマンドライン引数は、このプログラムのauthorized_keysファイルに追加する公開鍵の場所です(例:~/.ssh/id_rsa.pub)。私は、ファイルがプログラムに正しく渡されていることを確認しました。

この「短読」エラーをデバッグするためにソースコードを調べましたが、何が起こっているのかわかりません。 ParsePublicKeyのソースコードの場所はhereであり、ParsePublicKey関数が "短読"エラーを生成するために使用しているparseString関数のソースコードの場所は、crypto/sshhereにあります。 。

+1

[ 'ParsePublicKey']のドキュメント(https://godoc.org/golang.org/x/crypto/ssh#ParsePublicKey )はopensshが使用しているディスク上のフォーマットではなく、ワイヤ形式で公開鍵を解析すると言います。 – JimB

+0

複数のフォーマットがあることに気付かず、ワイヤフォーマットに変換する方法はありますか? @JimB –

+1

あなたは何も解析する必要はありません、id_rsa.pub _is_ authorized_keys形式です。ほとんどの人は、authorized_keysファイルに直接追加するだけで、cliに追加します。 – JimB

答えて

1

私はこの点でのコメントのいくつかをリードしていると思いますが、機能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) 
}