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


Posted in Python onFebruary 19, 2019

背景:我司Redis服务器使用的亚马逊服务,本地需要通过跳板机,然后才有权限访问Redis服务。

连接原理:使用SSHTunnelForwarder模块,通过本地22端口ssh到跳板机,然后本地开启一个转发端口给跳板机远程Redis服务使用。

两种思路:

1、通过SSHTunnelForwarder,paramiko模块,先ssh到跳板机,然后在跳板机上(或者内部服务器上),获取到权限,然后远程Redis。

2、使用SSHTunnelForwarder模块,通过本地22端口ssh到跳板机,然后本地开启一个转发端口给跳板机远程Redis服务使用。

思路一:

private_key_path = '/Users/xxx/.ssh/id_rsa'
rsaKey = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(跳板机或者内网服务器IP或者域名, 22, username, rsaKey)
stdin, stdout, stderr = ssh.exec_command('redis-cli -h {} -p {} -n {} {}'.format(host, port, db, script))
result = stdout.read(), stderr.read()
for out in result: # 需要通过循环拿到stdout,否则为空值
  if out:
    return out

类似:

import paramiko
from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
  (REMOTE_SERVER_IP, 443),
  ssh_username="",
  ssh_pkey="/var/ssh/rsa_key",
  ssh_private_key_password="secret",
  remote_bind_address=(PRIVATE_SERVER_IP, 22),
  local_bind_address=('0.0.0.0', 10022)
) as tunnel:
  client = paramiko.SSHClient()
  client.load_system_host_keys()
  client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  client.connect('127.0.0.1', 10022)
  # do some operations with client session
  client.close()

print('FINISH!')

方法二:

# 使用SSHTunnelForwarder隧道,通过跳板机链接Redis
with SSHTunnelForwarder(
    ('xxx.xxx.xx.xx', 22), # 跳板机
    ssh_username=username,
    ssh_pkey="/Users/xxx/.ssh/id_rsa",
    remote_bind_address=('xx.xx.xx.xxx', 6379), # 远程的Redis服务器
    local_bind_address=('0.0.0.0', 10022) # 开启本地转发端口
) as server:
  server.start() # 开启隧道
  print(server.local_bind_port)
  # 本地通过local_bind_port端口转发,利用跳板机,链接Redis服务
  cls.red = redis.Redis(host='127.0.0.1', port=server.local_bind_port, db=db, decode_responses=True)
  server.close() # 关闭隧道

Advice:

一般跳板机是个干净的机器,公司内网服务器大部分不会给权限或者有redis-client客户端,因此推荐使用方法2。

SSHTunnelForwarder使用:https://pypi.python.org/pypi/sshtunnel/

以上这篇python 通过SSHTunnelForwarder隧道连接redis的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
wxPython实现窗口用图片做背景
Apr 25 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
用Python shell简化开发
Aug 08 Python
Python 转换文本编码实现解析
Aug 27 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
Pandas实现一列数据分隔为两列
May 18 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python链表类中获取元素实例方法
Feb 23 Python
深入理解Django-Signals信号量
Feb 19 #Python
python利用跳板机ssh远程连接redis的方法
Feb 19 #Python
Python获取Redis所有Key以及内容的方法
Feb 19 #Python
Python元组常见操作示例
Feb 19 #Python
python redis 删除key脚本的实例
Feb 19 #Python
Python列表切片操作实例总结
Feb 19 #Python
Python常用的json标准库
Feb 19 #Python
You might like
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
python对日志进行处理的实例代码
2018/10/06 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
Python如何在DataFrame增加数值
2020/02/14 Python
使用python求解二次规划的问题
2020/02/29 Python
就业推荐自我鉴定
2013/10/06 职场文书
采购部主管岗位职责
2014/01/01 职场文书
运动会100米解说词
2014/01/23 职场文书
合作协议书
2014/04/23 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
心得体会格式及范文
2016/01/25 职场文书
争做文明公民倡议书
2019/06/24 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript