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多线程http下载实现示例
Dec 30 Python
Python实例之wxpython中Frame使用方法
Jun 09 Python
Python实现的几个常用排序算法实例
Jun 16 Python
小小聊天室Python代码实现
Aug 17 Python
python 文件操作api(文件操作函数)
Aug 28 Python
Python定时任务sched模块用法示例
Jul 16 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
Keras中 ImageDataGenerator函数的参数用法
Jul 03 Python
一文读懂Python 枚举
Aug 25 Python
python实现无边框进度条的实例代码
Dec 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
编译问题
2006/10/09 PHP
php+oracle 分页类
2006/10/09 PHP
php类中private属性继承问题分析
2012/11/01 PHP
php实现对象克隆的方法
2015/06/20 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Python和C/C++交互的几种方法总结
2017/05/11 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
python 制作本地应用搜索工具
2021/02/27 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
毕业典礼演讲稿
2014/05/13 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
重点工程汇报材料
2014/08/27 职场文书
房产授权委托书范本
2014/09/22 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
采购员岗位职责
2015/02/03 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
2015年工程部工作总结
2015/04/30 职场文书
爱国主义教育主题班会
2015/08/13 职场文书