golang Redis的-密钥空间,notification.go

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang Redis的-密钥空间,notification.go相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	//"github.com/gomodule/redigo/redis"
	"github.com/garyburd/redigo/redis"
)

func main() {
	conn, err := redis.Dial("tcp", ":6379")
	if err != nil {
		fmt.Println(err)
		return
	}
	psc := redis.PubSubConn{Conn: conn}
	//psc.PSubscribe("__key*__:expired")
	psc.PSubscribe("__keyevent@0__:expired")
	for {
		switch msg := psc.Receive().(type) {
		case redis.Message:
			fmt.Printf("Message: %s %s\n", msg.Channel, msg.Data)
		case redis.PMessage:
			fmt.Printf("PMessage: %s %s %s\n", msg.Pattern, msg.Channel, msg.Data)
		case redis.Subscription:
			fmt.Printf("Subscription: %s %s %d\n", msg.Kind, msg.Channel, msg.Count)
			if msg.Count == 0 {
				return
			}
		case error:
			fmt.Printf("error: %v\n", msg)
			return
		}
	}
}

使用 ssh golang 包解析 ssh 密钥

【中文标题】使用 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%              

            

【讨论】:

以上是关于golang Redis的-密钥空间,notification.go的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 redis 键空间通知推送到 redis 流而不是 pub/sub 通道

Redis Key过期通知

嵌入式 redis 无法启动 - ERR Unsupported CONFIG parameter: notify-keyspace-events

golang Golang RSA密钥生成

golang Golang RSA密钥生成

redis 超时失效key 的监听触发