第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Golang SSH 隧道連接到遠(yuǎn)程 postgres 數(shù)據(jù)庫

Golang SSH 隧道連接到遠(yuǎn)程 postgres 數(shù)據(jù)庫

Go
泛舟湖上清波郎朗 2021-12-20 19:30:11
我查看了各種資源。我不確定如何完成這項(xiàng)任務(wù)。我可以在本地連接沒問題,但我無法輕松連接到遠(yuǎn)程。我需要傳遞 RSA .pem 密鑰,但我不太確定如何在不強(qiáng)制不安全連接的情況下執(zhí)行此操作package mainimport (    "database/sql"    "fmt"    "os"    _ "github.com/lib/pq")var (    dbUser  = os.Getenv("DB_USER")    dbPass  = os.Getenv("DB_PASS")    dbName  = os.Getenv("DB_NAME")    dbHost  = os.Getenv("DB_HOST")    dbPort  = os.Getenv("DB_PORT")    sslMode = os.Getenv("SSLMODE"))// ConnectDb is a short cut function that takes parameters through// CLI that returns a pointer to a sql.DB connection.// It takes no arguments.func ConnectDb() (*sql.DB, error) {    db, err := sql.Open("postgres", getDbInfo())    CheckErr(err, "Unable to connecto tthe DB")    if err := db.Ping(); err != nil {        return nil, err    }    return db, nil}func getDbInfo() string {    var dbInfo string    if dbName != "" {        dbInfo += fmt.Sprintf("dbname=%s ", dbName)    } else {        dbInfo += fmt.Sprintf("dbname=%s ", "development")    }    // checks for nil value    if dbUser != "" {        dbInfo += fmt.Sprintf("dbuser=%s ", "user")    }    // checks for nil value    if dbPass != "" {        dbInfo += fmt.Sprintf("dbpass=%s ", dbPass)    }    if sslMode != "" {        dbInfo += fmt.Sprintf("sslmode=%s", sslMode)    } else {        dbInfo += fmt.Sprintf("sslmode=disable")    }    return dbInfo}
查看完整描述

1 回答

?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

我的理解是您需要打開與 postgre 數(shù)據(jù)庫的連接。我不知道是否存在本地 postgre ssh 隧道支持。所以,這個(gè)關(guān)于 SSH 隧道到 DB 機(jī)器的答案。

我沒有以這種方式測試過 postgre,但是我已經(jīng)在一些專有服務(wù)器連接中使用了這個(gè)模型。

過程是這樣的:

  1. 打開到數(shù)據(jù)庫機(jī)器的 ssh 連接

  2. 建立從本地端口到遠(yuǎn)程數(shù)據(jù)庫端口的隧道

  3. 在本地端口上打開數(shù)據(jù)庫連接

您可以使用 OpenSSH 或 putty 等 ssh 客戶端完成 #1 和 #2。你可能應(yīng)該這樣做 1st。如果外部客戶端正常工作,那么您可以嘗試將其全部放入 go 語言代碼中,而無需外部 SSH 客戶端。

在 go 你會使用

“golang.org/x/crypto/ssh”

包裹。

有關(guān)于如何使用 GO ssh 隧道的教程。以下不是未經(jīng)錯(cuò)誤檢查的測試樣本:

var buffer []byte

var err error

buffer, err = ioutil.ReadFile(sshKeyFile)

var key ssh.Signer

key, err = ssh.ParsePrivateKey(buffer)

var authMethod ssh.AuthMethod

authMethod = ssh.PublicKeys(key)

sshConfig = &ssh.ClientConfig{

    User: "user_id",

    Auth: []ssh.AuthMethod{authMethod},

}

conn, err := ssh.Dial("tcp", endpoint, sshConfig)

// open connection on postgre:

dbConn, err = conn.Dial("tcp", dbEndpoint)

上面的最后一行不是完全隧道,而是打開到數(shù)據(jù)庫服務(wù)器的 TCP 連接。您也許可以將該連接傳遞到 db 庫中。如果沒有,則必須設(shè)置隧道。


查看完整回答
反對 回復(fù) 2021-12-20
  • 1 回答
  • 0 關(guān)注
  • 486 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號