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实现数组插入新元素的方法
May 22 Python
python爬取网页转换为PDF文件
Jun 07 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
Python定义函数功能与用法实例详解
Apr 08 Python
详解python调用cmd命令三种方法
Jul 08 Python
基于python实现从尾到头打印链表
Nov 02 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
python反扒机制的5种解决方法
Feb 06 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
Python代码实现双链表
May 25 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来计算某个目录大小的方法
2014/04/01 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
JavaScript 的继承
2011/10/01 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
jQuery动态添加
2016/04/07 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python构建图像分类识别器的方法
2019/01/12 Python
Python中按值来获取指定的键
2019/03/04 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
Python 切分数组实例解析
2019/11/07 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
python爬取天气数据的实例详解
2020/11/20 Python
学校七一活动方案
2014/01/19 职场文书
请假条格式范文
2014/04/10 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
六一儿童节活动总结
2014/08/27 职场文书