golang如何生成SSH公钥文件authorized_keys

看着奢扣 2019-07-31 04:06:43
谢谢!
我生成的公钥是这样的:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApAsNx7DxWcjyaRpNP2Vx
nFGkvtgpZwn77FBu7pbKU54YnsRXWor2+B2RBwscmlTjkCA46y1OTWAEBEAE1qP8
V2pZHC2Z7X07+PU4R4Rb28YzOXUdsdZMykGxr4YBbhQdrqgOzBJLeJY0f7siajjH
6eKn/raiLGWLAxzdZ3oMcdqShJsek1BTCFUT3IcwyCvGPVKTMTLMSzl6F8gxuVc4
YGCv8SHug7cjWo1H1kEx3kXpvNy3JcE2d/BEdQqPRzrfNueXHNpK/DNwNxcvMbZ9
u0X/QQGFgify3nPVfUw+eZhHPxmBGwWzMraa8qJ0s/mO1UXEfSjZIIvmpnSl2Xkv
CQIDAQAB
-----END PUBLIC KEY-----


如何转换成如下编码格式并写入 authorized_keys文件?
root@node001:~/.ssh# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCy/2DmrG2TH+OD8ojZye4GQMM/OpCCxNjmLcZrOfCF+oBXSKtwhvdSdHcruGg48NwC59JULDru5/rSN5LEY0pYeCwuUBcqbzxwXJbECb7jubHiB2kuxZda7TbTbuOxye32I/DmrN6qEjwbSgBzYNqDHi/BxnurYLypbcr4s7ANLHOVUmhxOLcsIOWXUPdbSvzQd5Fjmp+b7NFMP7X0QhEpY8HoOxJB77phm/PUFBbSaEWFUWAyYyDNCzpzLRDlm+jiM9uYMp1WFygpARKYD0iHc0fpBvhLW0VlYvhZKvFfZOfHru8BUfIR855tUj6b/f7QL39UOjUzb5rhAxUJYjlR Generated-by-haff
...全文
423 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-08-01
  • 打赏
  • 举报
回复
pem格式转成ssh,自己查下api就可以解决了
for example

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))
}
看着奢扣 2019-08-01
  • 打赏
  • 举报
回复
谢谢2楼, 我一开始以为api都在x509的包里
看着奢扣 2019-07-31
  • 打赏
  • 举报
回复
也就是说 AAAAB3NzaC1yc2EAAAADAQABAAABAQCy/2DmrG2TH+OD8ojZye4GQMM/OpCCxNjmLcZrOfCF+oBXSKtwhvdSdHcruGg48NwC59JULDru5/rSN5LEY0pYeCwuUBcqbzxwXJbECb7jubHiB2kuxZda7TbTbuOxye32I/DmrN6qEjwbSgBzYNqDHi/BxnurYLypbcr4s7ANLHOVUmhxOLcsIOWXUPdbSvzQd5Fjmp+b7NFMP7X0QhEpY8HoOxJB77phm/PUFBbSaEWFUWAyYyDNCzpzLRDlm+jiM9uYMp1WFygpARKYD0iHc0fpBvhLW0VlYvhZKvFfZOfHru8BUfIR855tUj6b/f7QL39UOjUzb5rhAxUJYjlR 是如何根据公钥生成的

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧