Go语言 将ssh.PublicKey转换为带注解的字符串OpenSSH格式

tgabmvqs  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(83)

我试图在go服务中将ssh.PublicKey对象转换为ssh rsa字符串,我想通过网络将其发送到其他服务,这些服务将使用提供的公钥授权此请求。为此,我需要像下面这样的授权服务开放SSH格式的确切RSA字符串

ssh-rsa <pubkey> <comment>

我尝试了这个fmt.Println(base64.StdEncoding.EncodeToString(key.Marshal())),但它截断了注解部分,从而导致了授权问题。
在进行相等性检查时,我应该忽略auth服务中的注解吗?

zpgglvta

zpgglvta1#

我认为最好使用ssh.MarshalAuthorizedKey来生成所需格式的字符串!在您的授权服务中,当将接收到的公钥与存储的公钥进行比较时,如果注解部分与您的授权逻辑无关,则可以忽略注解部分,因为公钥本身应该足以进行比较!

package main

import (
    "crypto/rand"
    "crypto/rsa"
    "fmt"
    "golang.org/x/crypto/ssh"
)

func main() {
    //generating an RSA key pair
    privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)
    publicKey := &privateKey.PublicKey

    //converting the public key to an SSH RSA string
    authorizedKeyBytes := ssh.MarshalAuthorizedKey(publicKey)
    authorizedKeyString := string(authorizedKeyBytes)

    fmt.Println(authorizedKeyString)
}

相关问题