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的Flask框架中实现分页功能的教程
Apr 20 Python
python搭建微信公众平台
Feb 09 Python
python matplotlib画图实例代码分享
Dec 27 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
Python3 max()函数基础用法
Feb 19 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
python3下载抖音视频的完整代码
Jun 05 Python
python把转列表为集合的方法
Jun 28 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
Python新手如何理解循环加载模块
May 29 Python
用python实现学生管理系统
Jul 24 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
第十四节--命名空间
2006/11/16 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
Python装饰器原理与用法分析
2018/04/30 Python
Python3 读取Word文件方式
2020/02/13 Python
Python 从attribute到property详解
2020/03/05 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
营业经理岗位职责
2013/11/10 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
财务会计实训报告
2014/11/05 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python