python3 使用ssh隧道连接mysql的操作

我就废话不多说了,大家还是直接看代码吧~

import pymysql
from sshtunnel import SSHTunnelForwarder
import pymysql.cursors #以dict形式输出

def dbconnect_ssh(ssh_host,ssh_port,keyfile,ssh_user,db_host,db_name,sql,db_port,db_user,db_passwd):
 with SSHTunnelForwarder(
   (ssh_host, ssh_port),
   #ssh_password="sshpasswd",
   ssh_pkey=keyfile,
   ssh_username=ssh_user,
   remote_bind_address=(db_host, db_port)
 ) as server:

  db = pymysql.connect(
   host='127.0.0.1',
   port=server.local_bind_port,
   user=db_user,
   passwd=db_passwd,
   db=db_name,
   charset="utf8",
   cursorclass=pymysql.cursors.DictCursor)

  cursor = db.cursor()

  try:
   cursor.execute(sql)
   data = cursor.fetchall()
   db.commit()
  except:
   db.rollback()

  collect = []
  for result in data:
   collect.append(result)

  db.close()
  cursor.close()

  return collect

if __name__ == "__main__":
 ssh_host = "10.10.2.13"   #SSH服务器地址
 ssh_port = 22     #SSH端口
 keyfile = xxxx.key" #SSH密钥
 ssh_user = "root"   #SSH用户名
 db_host = "127.0.0.1"  #数据库地址
 db_name = 'DBname'    #数据库名
 sql = 'show tables;'  #SQL
 db_port = 3306     #数据库端口
 db_user = 'root'    #数据库用户名
 db_passwd = '33333'   #数据库密码
 result = dbconnect_ssh(ssh_host,ssh_port,keyfile,ssh_user,db_host,db_name,sql,db_port,db_user,db_passwd)
 print (result)

补充知识:Python 使用SSHTunnel 连接内网mysql数据库

准备:

主要模块 sshtunnel, pip install sshtunnel

其余模块 pymysql,playhouse,configparser

简介:

这里用的是数据库连接池和自动的链接断开重连机制,其实最主要的就是sshtunner的建立,所以可以只看service建立的 部分

配置文件:

[mysql]
database=ad_insight
max_connections=10
stale_timeout=1000
host=localhost
user=数据库用户名
password=数据库密码
port=3306

python 代码

from playhouse.pool import PooledMySQLDatabase
from playhouse.shortcuts import ReconnectMixin
from configparser import ConfigParser
from sshtunnel import SSHTunnelForwarder

class RetryMySQLDatabase(ReconnectMixin,PooledMySQLDatabase):
 _instance = None

 @staticmethod
 def get_db_instance():
  if not RetryMySQLDatabase._instance:
   server = SSHTunnelForwarder(
    ssh_address_or_host='ssh域名或者地址',
    ssh_port=ssh端口,
    ssh_password='ssh密码',
    ssh_username='ssh名称',
    remote_bind_address=('数据库地址',数据库端口)

   )
   server.start()
   config = ConfigParser()
   config.read("./default.cfg",encoding="utf-8")
   RetryMySQLDatabase._instance = RetryMySQLDatabase(
    str(config['mysql']['database']),
    max_connections=int(config['mysql']['max_connections']),
    stale_timeout=int(config['mysql']['stale_timeout']),
    host=str(config['mysql']['host']),
    user=str(config['mysql']['user']),
    password=str(config['mysql']['password']),
    port=server.local_bind_port
    # port=int(config['mysql']['port'])
   )
  return RetryMySQLDatabase._instance

其实主要是在server对象的建立和server.start

希望能给大家一个参考,本人亲测有效。也希望大家多多支持我们。

(0)

相关推荐

  • 使用Python实现SSH隧道界面功能

    目录 开发原因 效果图 源码分析 构建隧道 初始化加载 开始服务 停止服务 移除服务 不足之处 源码地址 开发原因 MobaXterm作为一个全能型终端神器,功能十分强大,我经常使用其中隧道功能,使用内部无法直接服务器,查询数据,一般来说,一个本地端口对于一个隧道,但是MobaXterm,免费版本最多只能建立三个隧道,比如,我需要一次查询统计,就会用到四个隧道的操作,就非常不方便,需要调整一个隧道,于是,便用python写了多隧道的客户端 效果图 界面使用tkinter实现,左边是输入隧道的信息

  • python 通过SSHTunnelForwarder隧道连接redis的方法

    背景:我司Redis服务器使用的亚马逊服务,本地需要通过跳板机,然后才有权限访问Redis服务. 连接原理:使用SSHTunnelForwarder模块,通过本地22端口ssh到跳板机,然后本地开启一个转发端口给跳板机远程Redis服务使用. 两种思路: 1.通过SSHTunnelForwarder,paramiko模块,先ssh到跳板机,然后在跳板机上(或者内部服务器上),获取到权限,然后远程Redis. 2.使用SSHTunnelForwarder模块,通过本地22端口ssh到跳板机,然后本

  • python3 使用ssh隧道连接mysql的操作

    我就废话不多说了,大家还是直接看代码吧~ import pymysql from sshtunnel import SSHTunnelForwarder import pymysql.cursors #以dict形式输出 def dbconnect_ssh(ssh_host,ssh_port,keyfile,ssh_user,db_host,db_name,sql,db_port,db_user,db_passwd): with SSHTunnelForwarder( (ssh_host, ss

  • Python基于ssh远程连接Mysql数据库操作

    目录 背景 安装支持库 连接Mysql 自定义查询函数 背景 如果需要访问远程服务器的Mysql数据库,但是该Mysql数据库为了安全期间,安全措施设置为只允许本地连接(也就是你需要登录到该台服务器才能使用),其他远程连接是不可以直接访问,并且相应的端口也做了修改,那么就需要基于ssh来连接该数据库.这种方式连接数据库与Navicat里面界面化基于ssh连接一样. Navicat 连接数据库 安装支持库 如果要连接Mysql,首先需要安装pymysql pip install pymysql 安

  • golang 通过ssh代理连接mysql的操作

    我就废话不多说了,大家还是直接看代码吧~ package main import ( "bytes" "context" "database/sql" "errors" "fmt" "github.com/go-sql-driver/mysql" "golang.org/x/crypto/ssh" "io" "io/ioutil"

  • Mysql SSH隧道连接使用的基本步骤

    前言 为了安全,mysql的root用户只本机登录,不对外网进行授权访问,此时可通过SSH隧道连接mysql数据库.以下为配置Mysql SSH隧道连接的基本步骤. 下面话不多说了,来一起看看详细的步骤吧 删除远程登录 登录mysql: mysql -uroot -p 查看用户开放的访问权限: select user, host from mysql.user; 删除不需要的访问权限,比如: delete from mysql.user where user='root' and host='%

  • python3.6使用pymysql连接Mysql数据库

    python3.6使用pymysql连接Mysql数据库及简单的增删改查操作,供大家参考,具体内容如下 折腾好半天的数据库连接,由于之前未安装pip ,而且自己用的Python 版本为3.6. 只能用 pymysql 来连接数据库,(如果有和我一样未安装 pip 的朋友请 点这里windows下python安装pip简易教程),下边简单介绍一下连接的过程,以及简单的增删改查操作. 1.通过pip 安装pymysql 进入 cmd  输入  pip install pymysql  回车等待安装完

  • Java基于jdbc连接mysql数据库操作示例

    本文实例讲述了Java基于jdbc连接mysql数据库操作.分享给大家供大家参考,具体如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySQLDemo { private Connection conn = null; pri

  • Eclipse连接Mysql数据库操作总结

    (自己亲测,开始学习Eclipse(我的Eclipse版本是4.5.2,Jdbc驱动器的jar包版本是5.1.7,亲测可以使用)连接到数据库的时候,发现网上有好多经验,但是发现网上的出现很多错误,故此发表此博客,希望对大家有所帮助) 1:首选你需要下载Jdbc驱动器(mysql-connector-java-5.1.7-bin.jar)这个文件 下载上面那个文件也是很是坎坷啊,所以为了你们的方便,特此分享. 2:下载好上面的Jdbc驱动器后,就可以开始动手操作了,首先打开Eclipse,创建一个

  • golang连接mysql数据库操作使用示例

    目录 安装 连接数据库 处理类型(Handle Types) 建表 Exec使用 Exec增删该示例 sql预声明(Prepared Statements) Query Queryx QueryRow和QueryRowx Get 和Select(非常常用) 事务(Transactions) 连接池设置 案例使用 golang操作mysql 安装 go get "github.com/go-sql-driver/mysql" go get "github.com/jmoiron

  • PHP连接MySQL数据库操作代码实例解析

    方法一:普通方法(面向过程) 首先,先做出如下假设(也适用与方法二和方法三) $username=your_name; $userpass=your_pass; $dbhost=localhost; $dbdatabase=your_database; 下面是关键步骤: //生成一个连接 $db_connect=mysql_connect($dbhost,$username,$userpass) or die("Unable to connect to the MySQL!"); //

  • C#连接MySQL操作详细教程

    C#如何连接MySQL进行操作,供大家参考,具体内容如下 1.引入MySql.Data.dll 例如小编是vs2017,创建工程之后,添加应用,选择工程,点击下面的引用,右击打开,选择添加引用 2.如何找到自己的MySql.Data.dll,答案就是自己安装MySQL的安装路径下,找到后选择添加 3.就是直接贴代码了,这里是查询账号密码,以及插入账号密码(注意:更改个人的数据名字以及表密码等) using System; using System.Collections.Generic; usi

随机推荐