Python:使用SSH隧道链接数据库

目录

 

一、SSH隧道

二、使用 sshtunnel 包建立隧道

2.1)使用账户、密码登录建立隧道

2.2)使用密钥文件代替密码

三、通过SSH隧道链接数据库


一、SSH隧道

SSh隧道,就是当本地机器因为网络限制无法直接连接目标机器时,可以先在本地机器上,用ssh协议登录一台跳板机,然后本地机器可以通过跳板机链接目标机器。

本地机器和跳板机之间的这个链接,就是SSH隧道。

二、使用 sshtunnel 包建立隧道

2.1)使用账户、密码登录建立隧道

在Python 中可以使用 sshtunnel 包创建 SSH 隧道,演示代码如下:

from sshtunnel import SSHTunnelForwarder

def get_ssh_tunnel():
    server = SSHTunnelForwarder(
            ssh_address_or_host=('192.168.1.2', 22),
            ssh_username='username',
            ssh_password='ssh-password',
            remote_bind_address=('10.16.3.3', 3306),
            local_bind_address=('0.0.0.0', 3306)
            )   
    server.start()

    return server

参数含义:

  • ssh_address_or_host : 跳板机的 IP 和 Port
  • ssh_username : 登录跳板机时使用的账户名称
  • ssh_password : 登录跳板机时使用的密码
  • remote_bind_address : 本地机器要访问的目标机器的IP(如果目标机器就是跳板机自己,则是 127.0.0.1)和 Port
  • local_bind_address : SSH 隧道监听的本地机器的 IP(可以是 0.0.0.0 监听所有IP,也可以选择指定的网口) 和 Port

2.2)使用密钥文件代替密码

上面是使用了账户和密码登录跳板机建立的隧道,但是使用密码明文有密码泄露的风险,其实 sshtunnel 还可以使用密钥进行登录,只需要把 ssh_password 参数去掉,换成 ssh_pkey 即可,代码如下:

from sshtunnel import SSHTunnelForwarder

def get_ssh_tunnel():
    server = SSHTunnelForwarder(
            ssh_address_or_host=('192.168.1.2', 22),
            ssh_username='username',
            ssh_pkey="/var/ssh/id_rsa",  # 密钥文件的路径
            remote_bind_address=('10.16.3.3', 3306),
            local_bind_address=('0.0.0.0', 3306)
            )   
    server.start()

    return server

其中 /var/ssh/id_rsa 就是密钥文件的路径。

想要使用密钥的方法创建 SSH 隧道,需要先把公钥 id_rsa.pub 的内容添加到跳板机的 ~/.ssh/authorized_keys 中才可以。

三、通过SSH隧道链接数据库

创建完了隧道之后,就可以连接目标机器了。这里使用的例子是连接目标机器上的 mysql 数据库。

  • 跳板机IP : 192.168.1.2
  • mysql数据库IP : 10.16.3.3
from sshtunnel import SSHTunnelForwarder

def get_ssh_tunnel():
    server = SSHTunnelForwarder(
            ssh_address_or_host=('192.168.1.2', 22),
            ssh_username='username',
            ssh_password='ssh-password',
            remote_bind_address=('10.16.3.3', 3306),
            local_bind_address=('0.0.0.0', 3306)
            )
    server.start()

    return server

import MySQLdb

def get_db_conn(sshserver):
    dbip = sshserver.local_bind_host
    dbport = sshserver.local_bind_port
    db = MySQLdb.connect(
            host=dbip,
            port=dbport,
            user='db-username',
            passwd='db-password',
            db='db-name',
            charset='utf8')

    return db

if "__main__" == __name__:
    sshserver = get_ssh_tunnel()
    db = get_db_conn(sshserver)
    cursor = db.cursor()
    cursor.execute("SELECT VERSION()")
    data = cursor.fetchone()
    print("DB version : {0}".format(data))
    db.close()

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 在Python使用MySQL数据库,您可以使用 MySQL Connector Python 驱动程序。这是一个由 MySQL 官方提供的 Python 驱动程序,用于连接到 MySQL 服务器并执行 SQL 查询。 在使用 MySQL Connector Python 之前,需要安装它。您可以使用 pip 包管理工具安装 MySQL Connector Python: ``` pip install mysql-connector-python ``` 安装完成后,您可以使用以下代码来连接到 MySQL 数据库: ```python import mysql.connector # 连接到数据库 cnx = mysql.connector.connect(user='用户名', password='密码', host='主机名', database='数据库名') # 创建游标 cursor = cnx.cursor() # 执行SQL查询 cursor.execute("SELECT * FROM table_name") # 获取查询结果 result = cursor.fetchall() # 关闭连接 cnx.close() ``` 在上面的代码中,我们使用 `mysql.connector.connect` 函数连接到 MySQL 数据库,并使用 `cursor` 对象执行 SQL 查询。最后,我们使用 `fetchall` 方法获取查询结果,并关闭连接。 请注意,在实际应用中,您还可以使用 try-except 语句捕获连接错误,并进行相应的处理。 ### 回答2: 使用Python链接MySQL数据库时,我们可以使用Python的第三方库来实现。 首先,我们需要安装pymysql库,可以通过在命令行输入"pip install pymysql"来安装。 接下来,在Python代码中导入pymysql库,并使用pymysql库提供的connect()函数来连接到MySQL数据库。在connect()函数中,我们需要指定数据库的主机名、用户名、密码和数据库名等参数。示例代码如下: ``` import pymysql # 连接到MySQL数据库 conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('SELECT * FROM students') # 获取查询结果 results = cursor.fetchall() # 遍历查询结果并打印 for row in results: print(row) # 关闭游标和数据库连接 cursor.close() conn.close() ``` 在以上示例中,我们成功连接到名为test的MySQL数据库,并执行了一个查询语句,获取了students表中的所有数据,并打印输出。 除了查询数据,我们还可以通过execute()函数执行其他SQL语句,如插入、更新和删除等操作。 需要注意的是,在连接MySQL数据库时,我们需要根据实际情况修改host、user、password和database等参数的值,以及根据需要执行不同的SQL语句。另外,访问MySQL数据库可能涉及到权限问题,需要确保我们有足够的权限操作数据库。 总之,通过使用Python的pymysql库,我们可以方便地实现与MySQL数据库的连接和操作。 ### 回答3: 使用Python链接MySQL数据库可以用到PyMySQL这个Python库。PyMySQL是一个纯Python实现的MySQL客户端库,提供了连接MySQL数据库所需的函数和方法。 首先,需要先安装PyMySQL库,可以通过命令行执行`pip install pymysql`来安装。 安装完毕后,可以使用以下代码示例来连接MySQL数据库: ```python import pymysql # 创建连接 conn = pymysql.connect( host='localhost', # 数据库主机地址 port=3306, # 数据库端口 user='root', # 数据库用户名 password='password', # 数据库密码 db='mydb' # 数据库名 ) # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute("SELECT * FROM mytable") # 获取所有记录 result = cursor.fetchall() # 输出结果 for row in result: print(row) # 关闭游标和连接 cursor.close() conn.close() ``` 上述代码首先创建了一个连接对象`conn`,并传入了数据库的主机地址、端口号、用户名、密码和数据库名等参数。接着,通过连接对象创建了一个游标对象`cursor`,可以通过游标对象执行SQL语句。在示例中,执行了一个查询语句,并将结果通过游标的`fetchall()`方法获取出来,最后遍历输出了每一行记录。最后需要调用`close()`方法关闭游标和连接,以释放资源。 以上就是使用Python链接MySQL数据库的基本步骤,可以根据具体的需求进行SQL语句的执行和结果处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值