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新手实现2048小游戏
Mar 31 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
python线程池threadpool实现篇
Apr 27 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
什么是Python变量作用域
Jun 03 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
Python request post上传文件常见要点
Nov 20 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 04 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
PHP重载基础知识回顾
2020/09/10 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
js正则相关知识点专题
2018/05/10 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python修改文件内容的3种方法详解
2019/11/15 Python
pyqt5中动画的使用详解
2020/04/01 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
python 检测图片是否有马赛克
2020/12/01 Python
Python中的面向接口编程示例详解
2021/01/17 Python
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
非常详细的C#面试题集
2016/07/13 面试题
高三毕业寄语
2014/04/10 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
医德医魂心得体会
2014/09/11 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
少先队工作总结2015
2015/05/13 职场文书
小学运动会加油稿
2015/07/22 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
Python max函数中key的用法及原理解析
2021/06/26 Python