介绍

今天就跟大家聊聊有关怎么在golang中利用ssh代理连接mysql,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

package 主要   import  (   “bytes"   “context"   “数据库/sql"   “errors"   “fmt"   “;github.com/go-sql-driver/mysql"   “;golang.org/x/crypto/ssh"   “无力偿贷;   “io/ioutil"   “net"   “os"   )   type  ViaSSHDialer  struct  {   client  * ssh.Client   _  * context.Context   }   ,   func  (self  * ViaSSHDialer),刻度盘(context  context.Context addr 字符串),(net.Conn,错误),{   return  self.client.Dial (“tcp",, addr)   }   type  remoteScriptType 字节   type  remoteShellType 字节   ,   const  (   cmdLine  remoteScriptType =极微小   rawScript   scriptFile    interactiveShell  remoteShellType =极微小   nonInteractiveShell   )   ,   type  Client  struct  {   client  * ssh.Client   }   func  main (), {   客户,,err :=, DialWithPasswd (“ip: port",,“user",,“password")   if  err  !=, nil  {   恐慌(err)   }   ,,err :=, client.Cmd (“ls  -l") .Output ()   if  err  !=, nil  {   恐慌(err)   }   fmt.Println (string ())//,你register 我方表示歉意,ViaSSHDialer  with 从而ssh  connection  as  a 参数   mysql.RegisterDialContext (“mysql + tcp",,(和ViaSSHDialer {client.client, nil}) .Dial)//mysql.RegisterDial (“mysql + tcp",,(和ViaSSHDialer {client.client}) .Dial)   if  db, err :=, sql.Open (“mysql",, fmt.Sprintf (“% s: % s@mysql + tcp (% s)/% s",“Aiqitest",,“uf6amk146d2aoemi7",,“139.196.174.234:3306",,“Aiqitest"));   时间==err  nil  {   fmt.Printf (“Successfully  connected 用,db \ n")   if 行,err :=, db.Query (“SELECT  id, name 得到table  ORDER  BY  id");, err ==, nil  {   for  rows.Next (), {   var  id  int64   var  name 字符串   rows.Scan(和id,,,名字)   fmt.Printf (“ID: % d 名称:,% s \ n",, ID,名称)   }   rows.Close ()   },{else    fmt.Printf(“失败:% s",, err.Error ())   }   ,   db.Close ()   }   }   ,//,DialWithPasswd  starts  a  client  connection 用,given  SSH  server  with  passwd  authmethod。   func  DialWithPasswd (addr,用户,passwd 字符串),(*客户,,错误),{   config :=,, ssh.ClientConfig {   用户:用户,   身份验证:[]ssh.AuthMethod {   ssh.Password(密码),   },   HostKeyCallback: ssh.HostKeyCallback (func(字符串,hostname  remote  net.Addr,, key  ssh.PublicKey), error  {, return  nil }),   }   ,   return 刻度盘(addr,“tcp",,配置)   }   ,//,DialWithKey  starts  a  client  connection 用,given  SSH  server  with  key  authmethod。   func  DialWithKey (addr,用户,keyfile 字符串),(*客户,,错误),{   键,,err :=, ioutil.ReadFile(密钥文件)   if  err  !=, nil  {   return  nil,犯错   }   ,   签名者,err :=, ssh.ParsePrivateKey(关键)   if  err  !=, nil  {   return  nil,犯错   }   ,   config :=,, ssh.ClientConfig {   用户:用户,   身份验证:[]ssh.AuthMethod {   ssh.PublicKeys(签名者),   },   HostKeyCallback: ssh.HostKeyCallback (func(字符串,hostname  remote  net.Addr,, key  ssh.PublicKey), error  {, return  nil }),   }   ,   return 刻度盘(addr,“tcp",,配置)   }   ,//,DialWithKeyWithPassphrase  same  as  DialWithKey  but  with  a  passphrase 用decrypt 从而private 关键   func  DialWithKeyWithPassphrase (addr,用户,keyfile 字符串,passphrase 字符串),(*客户,,错误),{   键,,err :=, ioutil.ReadFile(密钥文件)   if  err  !=, nil  {   return  nil,犯错   }   ,   签名者,err :=, ssh.ParsePrivateKeyWithPassphrase(钥匙,,[]字节(密码))   if  err  !=, nil  {   return  nil,犯错   }   ,   config :=,, ssh.ClientConfig {   用户:用户,   身份验证:[]ssh.AuthMethod {   ssh.PublicKeys(签名者),   },   HostKeyCallback: ssh.HostKeyCallback (func(字符串,hostname  remote  net.Addr,, key  ssh.PublicKey), error  {, return  nil }),   },   return 刻度盘(addr,“tcp",,配置)   }   ,//,Dial  starts  a  client  connection 用,given  SSH 服务器。//,却;能够is  wrap 从而ssh.Dial   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null