在生產(chǎn)環(huán)境中,如MySQL數(shù)據(jù)庫服務(wù)、rabbit-mq消息隊(duì)列服務(wù)、redis緩存服務(wù)等。為了安全,這些服務(wù)的通常端口都是不對外網(wǎng)開放的。
有時候,我們需要本地訪問這些服務(wù),要如何設(shè)置呢?
一、臨時開放端口,限制訪問ip。
二、使用vpn環(huán)境訪問。
三、ssh反向代理,在本地監(jiān)聽端口。
四、通過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