20230222
This commit is contained in:
BIN
bin/db_tunnel
BIN
bin/db_tunnel
Binary file not shown.
@@ -1,3 +1,3 @@
|
|||||||
[global]
|
[global]
|
||||||
# "用户名:密码@[连接方式](主机名:端口号)/数据库名"
|
# "用户名:密码@[连接方式](主机名:端口号)/数据库名"
|
||||||
MYSQL_INFO="root:1234@(43.142.66.71:3306)/teleport";
|
MYSQL_INFO="root:19891009@(43.142.66.71:3306)/teleport";
|
||||||
|
|||||||
45
src/main.go
45
src/main.go
@@ -85,15 +85,24 @@ func Tunnel(username string, password string, serverAddr string, remoteAddr stri
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var connect int // 连接数
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
|
||||||
|
connect++
|
||||||
|
|
||||||
// 设置本地
|
// 设置本地
|
||||||
localConn, err := localListener.Accept()
|
localConn, err := localListener.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("localListener.Accept failed: %v\n", err)
|
fmt.Printf("localListener.Accept failed: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
if connect == 3 {
|
||||||
|
fmt.Printf("连接数达到上线,重启进程!%d\n", connect)
|
||||||
|
syscall.Kill(os.Getpid(), syscall.SIGKILL)
|
||||||
|
}
|
||||||
|
|
||||||
go sForward(serverAddr, remoteAddr, localConn, config)
|
sForward(serverAddr, remoteAddr, localConn, config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,11 +151,11 @@ func ssh_tunnel(host_ip string, host_port string, host_name string, remote_ip st
|
|||||||
|
|
||||||
fmt.Println(host_ip, host_name, host_port)
|
fmt.Println(host_ip, host_name, host_port)
|
||||||
|
|
||||||
//"用户名:密码@[连接方式](主机名:端口号)/数据库名"
|
// "用户名:密码@[连接方式](主机名:端口号)/数据库名"
|
||||||
var db *sql.DB
|
var db *sql.DB
|
||||||
db, _ = sql.Open("mysql", mysql_info) // 设置连接数据库的参数
|
db, _ = sql.Open("mysql", mysql_info) // 设置连接数据库的参数
|
||||||
defer db.Close() //关闭数据库
|
defer db.Close() // 关闭数据库
|
||||||
err := db.Ping() //连接数据库
|
err := db.Ping() // 连接数据库
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("数据库连接失败")
|
fmt.Println("数据库连接失败")
|
||||||
// 退出
|
// 退出
|
||||||
@@ -217,16 +226,6 @@ func SubProcess(args []string) *exec.Cmd {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
DAEMON = "d"
|
|
||||||
FOREVER = "f"
|
|
||||||
HOST_IP = "h"
|
|
||||||
HOST_PORT = "p"
|
|
||||||
HOST_USER = "u"
|
|
||||||
HOST_REMOTE = "r"
|
|
||||||
HOST_LOCAL = "l"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Check if a port is available
|
// Check if a port is available
|
||||||
func Check(port int) (status bool, err error) {
|
func Check(port int) (status bool, err error) {
|
||||||
|
|
||||||
@@ -251,11 +250,11 @@ func Check(port int) (status bool, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetCurrentDirectory() string {
|
func GetCurrentDirectory() string {
|
||||||
dir, err := filepath.Abs(filepath.Dir(os.Args[0])) //返回绝对路径 filepath.Dir(os.Args[0])去除最后一个元素的路径
|
dir, err := filepath.Abs(filepath.Dir(os.Args[0])) // 返回绝对路径 filepath.Dir(os.Args[0])去除最后一个元素的路径
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
return strings.Replace(dir, "\\", "/", -1) //将\替换成/
|
return strings.Replace(dir, "\\", "/", -1) // 将\替换成/
|
||||||
}
|
}
|
||||||
|
|
||||||
func PathExists(path string) (bool, error) {
|
func PathExists(path string) (bool, error) {
|
||||||
@@ -271,6 +270,16 @@ func PathExists(path string) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
DAEMON = "d"
|
||||||
|
FOREVER = "f"
|
||||||
|
HOST_IP = "h"
|
||||||
|
HOST_PORT = "p"
|
||||||
|
HOST_USER = "u"
|
||||||
|
HOST_REMOTE = "r"
|
||||||
|
HOST_LOCAL = "l"
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
// 判断配置文件是否存在
|
// 判断配置文件是否存在
|
||||||
@@ -289,6 +298,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
// 读取数据库连接信息
|
// 读取数据库连接信息
|
||||||
MYSQL_INFO := cfg.Section("global").Key("MYSQL_INFO").String()
|
MYSQL_INFO := cfg.Section("global").Key("MYSQL_INFO").String()
|
||||||
|
if MYSQL_INFO == "" {
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
daemon := flag.Bool(DAEMON, false, "run in daemon")
|
daemon := flag.Bool(DAEMON, false, "run in daemon")
|
||||||
forever := flag.Bool(FOREVER, false, "run forever")
|
forever := flag.Bool(FOREVER, false, "run forever")
|
||||||
@@ -323,6 +335,7 @@ func main() {
|
|||||||
r, _ := Check(local_port_)
|
r, _ := Check(local_port_)
|
||||||
//fmt.Println(r)
|
//fmt.Println(r)
|
||||||
if r {
|
if r {
|
||||||
|
|
||||||
ssh_tunnel(*host_ip, *host_port, *host_user, *remote_port, *local_port, MYSQL_INFO)
|
ssh_tunnel(*host_ip, *host_port, *host_user, *remote_port, *local_port, MYSQL_INFO)
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(local_port_, "端口不可用!", r, "退出!")
|
fmt.Println(local_port_, "端口不可用!", r, "退出!")
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/python3
|
#!env python3
|
||||||
# cython: language_level=3
|
|
||||||
import base64
|
import base64
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@@ -7,6 +6,12 @@ from Crypto.Cipher import AES
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print('Error: command parameters missed.')
|
||||||
|
print('Usage:')
|
||||||
|
print('{} ENCRYPTED_PASSWORD'.format(sys.argv[0]))
|
||||||
|
print(' ENCRYPTED_PASSWORD encrypted password in base64 format, read from database.')
|
||||||
|
return
|
||||||
|
|
||||||
enc_password = sys.argv[1]
|
enc_password = sys.argv[1]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user