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捕捉和模拟鼠标事件的方法
Jun 03 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
Python字符串处理实现单词反转
Jun 14 Python
python文件特定行插入和替换实例详解
Jul 12 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python中url标签使用知识点总结
Jan 16 Python
tensorflow 查看梯度方式
Feb 04 Python
Python enumerate内置库用法解析
Feb 24 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
python开发前景如何
Jun 11 Python
Python如何实现线程间通信
Jul 30 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执行速度全攻略
2006/10/09 PHP
PHP4实际应用经验篇(2)
2006/10/09 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
python使用cookielib库示例分享
2014/03/03 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
汽车销售求职自荐信
2013/10/01 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书