Python使用sshtunnel通过跳板机连接远程中间件或内网依赖服务 您所在的位置:网站首页 python安全问题 Python使用sshtunnel通过跳板机连接远程中间件或内网依赖服务

Python使用sshtunnel通过跳板机连接远程中间件或内网依赖服务

2023-03-08 08:14| 来源: 网络整理| 查看: 265

本着遇到问题,针对问题,寻找解决方案的思路,回顾一次思考过程。

背景

 公司开发使用的是某大型平台云环境作为内网,本地开发、服务间的联调,如果使用VPN可以轻松解决。

但是如果这个VPN不稳定,怎么办呢?

解决思路

因为内网环境是个安全性要求较高的环境,又不能将MySQL、Redis、Kafka等中间件的服务端口直接暴露在公网。在平时本地查看的时候,通过自己云上一台机器(这里可以理解为跳板机或者堡垒机),作为跳板去连接其内网中的其他服务。

比如Navicat可以使用如下方式配置ssh隧道连接。

Navicat配置ssh

隧道连接上之后,这时的效果就是登录到了一台远程的机器,所以这时候访问这里中间件,比如这里的MySQL,连接就需要使用内网的配置,host主机就不能再配置为远程机器的外网IP了,如果是连接到的远程本机则为localhost,如果是内网中的其他机器,就按内网地址填写就可以了。

Navicat配置数据库连接

好了,配置好ssh和常规,没有问题的话,就可以正常连接并查看远程的MySQL数据库了。

补充一下,可能对于ssh不太熟悉的伙伴儿来说,对登录验证方式也不是很熟悉。

一般常用的,比如通过Termius(个人觉得它颜值在线,功能在线,很是推荐)连接远程的linux机器,使用密码或者公钥方式登录。(使用方式,网络上有很多文档介绍。)

因为本次项目是Python开发,所以想用这种方式直接在python本地开发时,采用该种方式连接数据库。

在网络上查询了一番,发现通过sshtunnel这个模块,可以快速搞定。使用代码一看就会,没有几行,下面简单说下自己对于堡垒机的认识。

简单一句话就是,一个外部访问内网环境的入口只有一个,比如都通过某台机器的22号端口。这就像是疫情期间,进小区只能从大门进,其他的侧门和后门都不让了。当然这样做就能达到监控的目的,主要的好处就是安全,而且进入内网操作的人员,其行为也会被记录(外部进入小区的朋友,请登记身份证,来访意向等信息)且能够被有效审计和定责。

如下图展示的,外部的PC只能通过bastion去连接A、B、C的三个服务,但PC不能直接访问A,需要通过bastion这个跳板间接访问。

堡垒机

所以以上通过sshtunnel来连接中间件,严格讲不是堡垒机,因为没有设置一套复杂的记录策略,而只是基本思路是一样的。

代码如下:

```python

import redis  # redis模块from sshtunnel import SSHTunnelForwarder  # ssh连接库

server = SSHTunnelForwarder(    ssh_address_or_host=("xx.xx.xx.xx", 22),   # ssh地址    ssh_username="username",  # ssh连接的用户名    ssh_pkey="d:/usr/.ssh/id_rsa",  # ssh连接的本地私钥地址,当然也可以是密码    # ssh_password= pwd    remote_bind_address=('127.0.0.1', 6379))

server.start()

db = redis.Redis(host='127.0.0.1', port=server.local_bind_port, password="123456", decode_responses=True, db=1)

```

以上代码只需要注意两点就可以:

创建连接堡垒机的server实例时,ssh_pkey参数指定本地私钥所在目录即可,不必写到文件,内部会自动补全。

其他中间件模块连接服务时,使用方式不改变,在port的地方,使用堡垒机server实例提供的端口即可。

总结

本次解决思路归纳如下:

1. 想法来源:看到Navicat的连接方式,将此种方式搬到python中(使用上,其实实现上本来就有)。

2. 类比jump server: 同样的可以通过代理方式,将其他本地依赖的服务,将grpc的客户端,通过跳板机连上,或者flask、django的服务,也可以通过该方式连上。

3. 在django中集成:在settings中分环境设置即可,开发环境正常使用,不影响其他环境的连接设置。

我是扣丁船,在代码的海洋里扬帆。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有