我正试着看看是否可以在go中使用redis进行ssh隧道。我正在使用redigo库。
通过命令行我通常会执行以下操作:
ssh user@host -p port
然后redis-cli -h redisHost
答案 0 :(得分:2)
使用network dial这样的Redigo函数:
func dial(network, addr string) (net.Conn, error) {
user := "user"
password := "password"
sshAddr := "example.com:22"
redisAddr := ":6379"
config := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(passord),
},
}
netConn, err := net.Dial("tcp", sshAddr)
if err != nil {
return nil, err
}
clientConn, chans, reqs, err := ssh.NewClientConn(netConn, sshAddr, config)
if err != nil {
netConn.Close()
return nil, err
}
client := ssh.NewClient(clientConn, chans, reqs)
conn, err := client.Dial("tcp", redisAddr)
if err != nil {
client.Close()
return nil, err
}
conn, nil
}
如果应用程序创建了与服务器的多个连接,则创建client
一次并在每个拨号盘上重复使用。
上述代码未经编译且未经测试。