通过跳板机SSH/远程链接mysql

23 篇文章 1 订阅

三部分配置:
SSH通道配置ip,port,用户名,密码
模板服务器ip,port
映射的本地的ip,port,目标服务器用户名密码

import pymysql
from sshtunnel import SSHTunnelForwarder

server = SSHTunnelForwarder(
    ssh_address_or_host=('xx.11.12.28', 2210),
    ssh_password='xxx',
    ssh_username='xxx',
    remote_bind_address=('xx.168.57.26', 3306))

server.start()
# 以下注释部分为pymysql方式连接
myConfig = pymysql.connect(
            user="xxx",
            passwd="xxx",
            host="127.0.0.1",  # 此处必须是 127.0.0.1
            db='cms',
            port=server.local_bind_port)
cursor = myConfig.cursor()
cursor.execute('SELECT * FROM yh_szbgd_eventinfo;')
print(cursor.fetchall())
myConfig.close()

server.stop()

from sshtunnel import SSHTunnelForwarder
from sqlalchemy import create_engine
import pandas as pd
from sqlalchemy.pool import NullPool

server = SSHTunnelForwarder(
    ssh_address_or_host=('xx', 2210),
    ssh_password='xx',
    ssh_username='xx',
    remote_bind_address=('xx', 3306))

server.start()
engine = create_engine(
    'mysql_mart+pymysql://xx:xx@127.0.0.1:%s/cms' % server.local_bind_port)
pd_dataFrame = pd.read_sql('yh_szbgd_eventinfo', engine)
print(pd_dataFrame)
# 以下注释部分为pymysql方式连接
# myConfig = pymysql.connect(
#             user="****",
#             passwd="****",
#             host="127.0.0.1",  # 此处必须是 127.0.0.1
#             db='***',
#             port=server.local_bind_port)
# cursor = myConfig.cursor()
# cursor.execute('SELECT * FROM target_feature;')
# print(cursor.fetchall())
# myConfig.close()

server.stop()


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

通俗点讲,以前的网络通信都是明文数据传输,一旦被截获,那么我们的信息都将被对方轻易获取。后来SSH协议横空出世,用户登录时向服务器发送请求,服务器将公钥发送给客户端,客户端通过公钥加密后再将加密的的数据发送给服务器,服务器在通过一个只有自己知道的私钥去解密,虽然这中间也无法避免所有的攻击,但相对于近乎“裸奔”的数据通信来说已经是很大的进步
1.写端口号的时候切记不要加引号!!!
2.最上面的那个连接信息一定是服务器的,不是数据库的!!!
3.绑定的本地端口号不一定非要是13306,只要没有端口冲突都行!!!
4.如果密码中有‘\’,切记一定要用‘\’进行转义!!!
其实以我浅显的知识储备来解释,还是很好理解的。首先通过 sshtunnel.SSHTunnelForwarder 进行端口映射,将远程服务器的3306端口映射到本地的13306端口,再连接本地的端口,那么后续对本地13306端口的操作其实都可以视为对线上服务器3306端口的操作,理论上来说,PuTTY也是进行了相同的操作,以此达到内网穿透的目的。
连接数据库的方法其实还是挺简单的,最主要还是细心,以前有一个憨憨,他们的密码中有一个反斜杠,而他没有转义就直接传了进去,导致死活连接不上,找了好久的原因也没找着,最后就不了了之

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值