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实现的简单文件传输服务器和客户端
Apr 08 Python
浅析python的优势和不足之处
Nov 20 Python
django模板结构优化的方法
Feb 28 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Django中自定义查询对象的具体使用
Oct 13 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
python机器学习库xgboost的使用
Jan 20 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
python中Django文件上传方法详解
Aug 05 Python
python3实现常见的排序算法(示例代码)
Jul 04 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 购物车实例(申精)
2009/05/11 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php文件缓存类汇总
2014/11/21 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
python 实现逻辑回归
2020/12/30 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
红旗团支部事迹材料
2014/01/27 职场文书
酒店经理职责
2014/01/30 职场文书
《长城》教学反思
2014/02/14 职场文书
体育委员竞选稿
2015/11/21 职场文书
初三语文教学反思
2016/03/03 职场文书
实用求职信模板范文
2019/05/13 职场文书
httpclient调用远程接口的方法
2022/08/14 Java/Android