『Python』Python通过SSH连接远程数据库

在这里插入图片描述

前言

永远相信美好的事情即将发生


背景

前段时间一直在做Python爬虫的开发(别问我为什么一个Java要去搞Python爬虫,我就是块砖),因学艺不精,未能21天从入门到精通,导致出现过形形色色的问题,其中一个就是通过SSH连接线上服务器数据库一直无法连接成功,后来也是一直用PuTTY内网穿透勉强度日,今日终于痛下决心,钻研半日,方得原因,顿时捶胸顿足,噫吁嚱,菜哉

在这里插入图片描述

踩坑

其实刚开始写的时候我是拒绝的,连接数据库?连接数据库有啥好写的

在这里插入图片描述
你先这样

在这里插入图片描述

在这样

在这里插入图片描述

不就好了
在这里插入图片描述
然后我就发现我看不懂了,可能 八成 一定是因为我太菜了

爬坑

在网上看了一下大佬们的博客,什么堡垒机,什么跳板机之类的,看得我一度对自己的语文水平产生怀疑,一脸懵圈的来,一脸懵圈的走

在这里插入图片描述
菜定思菜,后来通过我不懈的学(bai)习(du)和请(sao)教(rao),也终于有了些心得,下面我会用自己的理解来向大家展示,如果有什么不对的地方欢迎各位留言

在这里插入图片描述
连接之前首先要了解这么几个知识点

  • 什么是SSH

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

通俗点讲,以前的网络通信都是明文数据传输,一旦被截获,那么我们的信息都将被对方轻易获取。后来SSH协议横空出世,用户登录时向服务器发送请求,服务器将公钥发送给客户端,客户端通过公钥加密后再将加密的的数据发送给服务器,服务器在通过一个只有自己知道的私钥去解密,虽然这中间也无法避免所有的攻击,但相对于近乎“裸奔”的数据通信来说已经是很大的进步

在这里插入图片描述

首先,我们需要导入mysql和sshtunnel这两个必要的包,前者是什么就不用介绍了,sshtunnel则是用户能通过SSH安全隧道访问远程服务器的关键

import mysql.connector
import sshtunnel

with sshtunnel.SSHTunnelForwarder(
        ('这里填远程服务器的地址', 这里填端口号),
        ssh_username='服务器的用户名,不是数据库的!!!',
        ssh_password='服务器的密码',
        remote_bind_address=('数据库的地址', 数据库端口号,一般都是3306),
        local_bind_address=('127.0.0.1', 13306)
) as tunnel:
    conn = mysql.connector.connect(
        user='数据库的用户名',
        password='数据库的密码',
        host='127.0.0.1',
        port=13306,
        database='需要连接的库名',
    )
    cursor = conn.cursor()
    query = "select version();"
    cursor.execute(query)
    data = cursor.fetchall()
    print(data)

有几点需要特别注意:

1.写端口号的时候切记不要加引号!!!
2.最上面的那个连接信息一定是服务器的,不是数据库的!!!
3.绑定的本地端口号不一定非要是13306,只要没有端口冲突都行!!!
4.如果密码中有‘\’,切记一定要用‘\\’进行转义!!!

个人理解

其实以我浅显的知识储备来解释,还是很好理解的。首先通过 sshtunnel.SSHTunnelForwarder 进行端口映射,将远程服务器的3306端口映射到本地的13306端口,再连接本地的端口,那么后续对本地13306端口的操作其实都可以视为对线上服务器3306端口的操作,理论上来说,PuTTY也是进行了相同的操作,以此达到内网穿透的目的。

在这里插入图片描述

总结

连接数据库的方法其实还是挺简单的,最主要还是细心,以前有一个憨憨,他们的密码中有一个反斜杠,而他没有转义就直接传了进去,导致死活连接不上,找了好久的原因也没找着,最后就不了了之,别问我为什么知道的那么多

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3价Fe离子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值