1 回答
TA贡献2012条经验 获得超12个赞
是的,我也遇到过这个。
该x509
包不支持ed25519
所使用格式的封送处理密钥类型openssh
,因此正如您所发现的,此代码 - 适用于其他密钥类型 - 对ed25519
密钥失败:
bytes, err := x509.MarshalPKCS8PrivateKey(privateKey) // produces invalid output for ed25519 keys
有一个带有辅助函数edkey.MarshalED25519PrivateKey的 repo ( github.com/mikesmitty/edkey )来解决这个问题:
/* 将 ed25519 私钥写入新的 OpenSSH 私钥格式。我不知道为什么这还没有在任何地方实现,除了以 OpenSSH 私钥格式将其写入磁盘之外,您似乎可以做任何事情。*/
它似乎是仿照 openssh 来源:sshkey.c
sshkey_private_to_blob2
因此,要么将该辅助函数复制到您的代码中(推荐,因为 repo 已有 5 年以上历史),要么将其作为导入引用:
import "github.com/mikesmitty/edkey"
pubKey, privKey, _ := ed25519.GenerateKey(rand.Reader)
publicKey, _ := ssh.NewPublicKey(pubKey)
pemKey := &pem.Block{
Type: "OPENSSH PRIVATE KEY",
Bytes: edkey.MarshalED25519PrivateKey(privKey), // <- marshals ed25519 correctly
}
privateKey := pem.EncodeToMemory(pemKey)
authorizedKey := ssh.MarshalAuthorizedKey(publicKey)
_ = ioutil.WriteFile("id_ed25519", privateKey, 0600)
_ = ioutil.WriteFile("id_ed25519.pub", authorizedKey, 0644)
- 1 回答
- 0 关注
- 258 浏览
添加回答
举报