如何通过Go中的ssh隧道连接到redis?

时间:2017-07-13 06:33:42

标签: go ssh redis

我正试着看看是否可以在go中使用redis进行ssh隧道。我正在使用redigo库。

通过命令行我通常会执行以下操作:

ssh user@host -p port

然后redis-cli -h redisHost

1 个答案:

答案 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一次并在每个拨号盘上重复使用。

上述代码未经编译且未经测试。