RDM-Wails/redisCliet.go

73 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"context"
"fmt"
"log"
"net"
"github.com/redis/go-redis/v9"
"golang.org/x/crypto/ssh"
)
func GetRedisClient(redisAddr string, port string, password string, db int, sshConfig *SSHConfig) (*redis.Client, error) {
ctx := context.Background()
options := &redis.Options{
Network: "tcp", // 连接方式默认使用tcp可省略
Addr: net.JoinHostPort(redisAddr, port),
Password: password,
DB: db, // 选择要操作的数据库默认是0 redis中select index命令
}
var sshClient *ssh.Client = nil
if sshConfig != nil {
var err error
sshClient, err = getSSHClient("user", "pass", "ip+port")
if nil != err {
log.Printf("get ssh client err: %v\n", err)
return nil, err
}
options.Dialer = func(ctx context.Context, network, addr string) (conn net.Conn, e error) {
return sshClient.Dial(network, addr)
}
}
redisClient := redis.NewClient(options)
if err := redisClient.Ping(ctx).Err(); nil != err {
log.Printf("connect to redis err: %v\n", err)
return nil, err
}
return redisClient, nil
}
func getSSHClient(user, pass, addr string) (*ssh.Client, error) {
config := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(pass),
},
//需要验证服务端不做验证返回nil没有该参数会报错
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
sshConn, err := net.Dial("tcp", addr)
if nil != err {
fmt.Println("net dial err: ", err)
return nil, err
}
clientConn, chans, reqs, err := ssh.NewClientConn(sshConn, addr, config)
if nil != err {
sshConn.Close()
fmt.Println("ssh client conn err: ", err)
return nil, err
}
sshClient := ssh.NewClient(clientConn, chans, reqs)
return sshClient, nil
}