使用 ssh golang 包解析 ssh 密钥
Posted
技术标签:
【中文标题】使用 ssh golang 包解析 ssh 密钥【英文标题】:Parsing ssh key with ssh golang package 【发布时间】:2021-09-16 18:56:15 【问题描述】:我正在尝试使用 golang (https://pkg.go.dev/golang.org/x/crypto/ssh#ParseRawPrivateKey) 的 ssh 包中的 ParseRawPrivateKey()。文档声明它同时支持 PKCS1 和 PKCS8 类型。我有两种类型的键:
-
私钥 (PKCS8)
RSA 私钥 (PKCS1)
但是我收到以下 PKCS8 类型的错误。它适用于“RSA PRIVATE KEY”类型:
ssh: unsupported key type "PRIVATE KEY"
请告诉我为什么这不起作用,并帮助我解析这两种键的类型。我使用的 Go 版本是 1.11.13。
我试图解析密钥文件的部分代码如下。以下代码中的错误是我看到上述错误的地方:
buf, _ := ioutil.ReadFile(<keyfile>)
key, err := ssh.ParseRawPrivateKey(buf)
signer, _ := ssh.NewSignerFromKey(key)
以下是关键文件:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
和
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
【问题讨论】:
您应该发布您的 Go 代码和导致问题的 PKCS#8 测试密钥。 感谢您的宝贵时间。这是因为go版本吗?我正在使用 go1.11.13。这个游乐场使用 go1.16.5 Go 1.11 已经相当老了,这一点,它不再受支持。我建议您尝试使用更新的版本。查看pkg.go.dev/golang.org/dl@v0.0.0-20210610154546-0cc6883720ee/…。 我不能肯定。但是如果链接的代码没有在你的环境中运行,那将是一个合理的结论。 【参考方案1】:感谢上述 cmets 的帮助。问题是去版本。这适用于 go1.12.15+。我关注了this,并在我的机器上安装了各种版本的 go,并在各种版本上尝试了 sample code。 以下是我看到的区别:
bash> go1.12.15 run test.go
Go version: go1.12.15
&144479305181965272490254391937025069107948546376651838223957892566897461066699421944565346422245724715479373672069322891078162435195710365456982744608092875180392440184046997322460990034866647878368774295132982263484396416207829505054992733049356448573060223609095630481896584887339018846095104448737699187657 65537 2645454723566204235596766259127364434281982020110505605516722936360787849307098377000448841214807965860128605314298601847716479580005988045659387727996573252188486690862166280792012065797946748750551729842440936084694300539272090480528208606882126846797991966205614019665289902037602352045258789517854779073 [13263472511923445942519309104215506888615505598321091479402380111710326104845418963276768049143608185415654643773759208206999416418839087584135630592068539 10893022551378072895182930140189193062535475752041804793170952109393846495498117381783390279015666041475046770751717018290963057312218682415905914066572363] 7952781113394627946919126151017784742893860078911540210485617725403496873766049461844818610237685998048332466877239450168641363925640489886723434697131777 9487036959085061029819053153817214117573277461205763675246221287211528911455232066121921210089814704904294056501922638662306626566165951369990658148707101 11643611777085191570803741719831263049793572409284501604810833118017412892519680723494951942101995443325154130770992562619423947706172758471124284788676524 []
&0xc0000ae0c0 0xc0000ae0c0
bash> go1.11.13 run test.go
# golang.org/x/crypto/curve25519/internal/field
../pkg/mod/golang.org/x/crypto@v0.0.0-20210616213533-5ff15b29337e/curve25519/internal/field/fe.go:328:12: undefined: bits.Mul64
../pkg/mod/golang.org/x/crypto@v0.0.0-20210616213533-5ff15b29337e/curve25519/internal/field/fe_generic.go:17:12: undefined: bits.Mul64
../pkg/mod/golang.org/x/crypto@v0.0.0-20210616213533-5ff15b29337e/curve25519/internal/field/fe_generic.go:23:12: undefined: bits.Mul64
../pkg/mod/golang.org/x/crypto@v0.0.0-20210616213533-5ff15b29337e/curve25519/internal/field/fe_generic.go:24:11: undefined: bits.Add64
../pkg/mod/golang.org/x/crypto@v0.0.0-20210616213533-5ff15b29337e/curve25519/internal/field/fe_generic.go:25:10: undefined: bits.Add64
note: module requires Go 1.17%
【讨论】:
以上是关于使用 ssh golang 包解析 ssh 密钥的主要内容,如果未能解决你的问题,请参考以下文章
github ssh 密钥不被接受,获取 ssh 数据包类型 51 (
Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH