在生产环境中,如MySQL数据库服务、rabbit-mq消息队列服务、redis缓存服务等。为了安全,这些服务的通常端口都是不对外网开放的。
有时候,我们需要本地访问这些服务,要如何设置呢?
一、临时开放端口,限制访问ip。
二、使用vpn环境访问。
三、ssh反向代理,在本地监听端口。
四、通过ssh隧道访问。
五、其他。。
这里介绍golang如何使用ssh隧道连接rabbit-mq
// 日志格式配置
log.SetFlags(log.LstdFlags|log.Lshortfile)
// ssh连接
client,err := ssh.Dial("tcp","localhost:22",&ssh.ClientConfig{
User: "root",
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
Auth: []ssh.AuthMethod{
ssh.Password("root-password"),
},
Timeout: 3*time.Second,
})
if err != nil {
log.Fatal(err)
}
// rabbit-mq连接
url := fmt.Sprintf("amqp://%s:%s@%s", "User", "Password", "Addr")
dialCfg := amqp.Config{
Heartbeat: 10 * time.Second,
Locale: "en_US",
// dialer 自定义配置
Dial: func.NETwork, addr string) (net.Conn, error) {
// 使用ssh隧道
return client.Dial(network, addr)
},
}
conn, err := amqp.DialConfig(url, dialCfg)
log.Println(err,conn)
这里使用到了golang.org/x/crypto/ssh和Github.com/streadway/amqp