go語(yǔ)言使用ssh連接redis

準(zhǔn)備工作

  1. golang的ssh包 golang.org/x/crypto/ssh

    該包不在標(biāo)準(zhǔn)庫(kù)中舰绘,需要單獨(dú)下載。因?yàn)镚FW齿梁,不能直接使用go get命令下載烹植,可以去github下載

    地址:https://github.com/golang/crypto

    $GOPATH/src目錄下創(chuàng)建golang.org/x目錄結(jié)構(gòu),將下載的crypto包移動(dòng)到$GOPATH/src/golang.or/x

  2. redis庫(kù)
    redigo窖贤,github地址:https://github.com/gomodule/redigo

    go-redis/redis砖顷,github地址:https://github.com/go-redis/redis

獲取SSH連接

func getSSHClient(user, pass, addr string) (*ssh.Client, error) {
    config := &ssh.ClientConfig{
        User:user,
        Auth:[]ssh.AuthMethod{
            ssh.Password(pass),
        },
        //需要驗(yàn)證服務(wù)端贰锁,不做驗(yàn)證返回nil,沒(méi)有該參數(shù)會(huì)報(bào)錯(cuò)
        HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
            return nil
        },
    }

    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
    }

    client := ssh.NewClient(clientConn, chans, reqs)

    return client, nil
}

連接Redis(redigo)

func getRedisConn(redisAddr string) (redis.Conn, error) {
    // ssh的用戶名滤蝠,密碼豌熄,地址,改成自己實(shí)際的
    sshClient, err := getSSHClient("user", "password", "ip+port")
    if nil != err {
        return nil, err
    }

    conn, err := sshClient.Dial("tcp", redisAddr)
    if nil != err {
        fmt.Println("dial to redis addr err: ", err)
        return nil, err
    }

    redisConn := redis.NewConn(conn, -1, -1)
    return redisConn, nil
}

得到redis.Conn就可以直接使用物咳,使用方法參照redigo的文檔:https://godoc.org/github.com/gomodule/redigo/redis

連接Redis(go-redis/redis)

func getRedisClient(redisAddr string, db int) (*redis.Client, error) {
    cli, err := getSSHClient("user", "pass", "ip+port")
    if nil != err {
        log.Printf("get ssh client err: %v\n", err)
        return nil, err
    }

    redisCli := redis.NewClient(&redis.Options{
        Network: "tcp", // 連接方式锣险,默認(rèn)使用tcp,可省略
        Addr:    redisAddr,
        DB:      db, // 選擇要操作的數(shù)據(jù)庫(kù)览闰,默認(rèn)是0 (redis中select index命令)
        Dialer: func(ctx context.Context, network, addr string) (conn net.Conn, e error) {
            return cli.Dial(network, addr)
        },
    })

    if err = redisCli.Ping().Err(); nil != err {
        log.Printf("connect to redis err: %v\n", err)
        return nil, err
    }

    return redisCli, nil
}

同樣芯肤,得到*redis.Client后就可以操作redis了。go-redis/redis的參考文檔:https://godoc.org/github.com/go-redis/redis

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末压鉴,一起剝皮案震驚了整個(gè)濱河市崖咨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌油吭,老刑警劉巖击蹲,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異婉宰,居然都是意外死亡歌豺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)心包,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)类咧,“玉大人,你說(shuō)我怎么就攤上這事蟹腾÷痔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵岭佳,是天一觀的道長(zhǎng)血巍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)珊随,這世上最難降的妖魔是什么述寡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叶洞,結(jié)果婚禮上鲫凶,老公的妹妹穿的比我還像新娘。我一直安慰自己衩辟,他們只是感情好螟炫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著艺晴,像睡著了一般昼钻。 火紅的嫁衣襯著肌膚如雪掸屡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天然评,我揣著相機(jī)與錄音仅财,去河邊找鬼。 笑死碗淌,一個(gè)胖子當(dāng)著我的面吹牛盏求,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亿眠,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碎罚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了纳像?” 一聲冷哼從身側(cè)響起荆烈,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爹耗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谜喊,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潭兽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斗遏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山卦。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诵次,靈堂內(nèi)的尸體忽然破棺而出账蓉,到底是詐尸還是另有隱情,我是刑警寧澤逾一,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布铸本,位于F島的核電站,受9級(jí)特大地震影響遵堵,放射性物質(zhì)發(fā)生泄漏箱玷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一陌宿、第九天 我趴在偏房一處隱蔽的房頂上張望锡足。 院中可真熱鬧,春花似錦壳坪、人聲如沸舶得。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沐批。三九已至纫骑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間珠插,已是汗流浹背惧磺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捻撑,地道東北人磨隘。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像顾患,于是被迫代替她去往敵國(guó)和親番捂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. 分布式系統(tǒng)核心問(wèn)題 參考書(shū)籍:《區(qū)塊鏈原理江解、設(shè)計(jì)與應(yīng)用》 一致性問(wèn)題例子:兩個(gè)不同的電影院買(mǎi)同一種電影票设预,如...
    molscar閱讀 904評(píng)論 0 0
  • windows下 golang 安裝與配置請(qǐng)參照:http://www.reibang.com/p/b6f34ae...
    molscar閱讀 2,113評(píng)論 0 7
  • 簡(jiǎn)介 此項(xiàng)目是一個(gè)模擬公民身份信息鏈的區(qū)塊鏈項(xiàng)目 github 地址: https://github.com/ak...
    CrazyWolf_46a9閱讀 8,739評(píng)論 0 0
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007閱讀 2,201評(píng)論 0 3
  • 我眼中的李白是一位很奇怪的人,就連杜甫都評(píng)價(jià)李白:“飛揚(yáng)跋扈為誰(shuí)雄”±绾樱現(xiàn)在我們學(xué)習(xí)的李白詩(shī)歌鑒賞已經(jīng)到了最后一課鳖枕,...
    王若軻閱讀 977評(píng)論 4 5