2,190
社区成员
发帖
与我相关
我的任务
分享
import (
"fmt"
"encoding/pem"
"crypto/rsa"
"crypto/x509"
"golang.org/x/crypto/ssh"
)
func main() {
p := `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApAsNx7DxWcjyaRpNP2Vx
nFGkvtgpZwn77FBu7pbKU54YnsRXWor2+B2RBwscmlTjkCA46y1OTWAEBEAE1qP8
V2pZHC2Z7X07+PU4R4Rb28YzOXUdsdZMykGxr4YBbhQdrqgOzBJLeJY0f7siajjH
6eKn/raiLGWLAxzdZ3oMcdqShJsek1BTCFUT3IcwyCvGPVKTMTLMSzl6F8gxuVc4
YGCv8SHug7cjWo1H1kEx3kXpvNy3JcE2d/BEdQqPRzrfNueXHNpK/DNwNxcvMbZ9
u0X/QQGFgify3nPVfUw+eZhHPxmBGwWzMraa8qJ0s/mO1UXEfSjZIIvmpnSl2Xkv
CQIDAQAB
-----END PUBLIC KEY-----` //这里为了方便,省略读文件
b := []byte(p) //如果是读文件,b, err := ioutil.ReadFile(“your_pem_file”)
block, _ := pem.Decode(b)
if block == nil {
panic("invalid public key data")
}
if block.Type != "PUBLIC KEY" {
panic(fmt.Sprintf("invalid public key type : %s", block.Type))
}
keyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
panic("failed to convert bytes to public key.")
}
key, ok := keyInterface.(*rsa.PublicKey)
if !ok {
panic("not RSA public key")
}
skey, err := ssh.NewPublicKey(key)
if (err != nil) {
panic("failed to convert ras key to ssh key.")
}
b = ssh.MarshalAuthorizedKey(skey)
fmt.Printf("result: %v", string(b))
}