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计算N天之后日期的方法
Mar 31 Python
Python中的ctime()方法使用教程
May 22 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
Python查看微信撤回消息代码
Jun 07 Python
python实现机器学习之多元线性回归
Sep 06 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
Python实现计算对象的内存大小示例
Jul 10 Python
python将字母转化为数字实例方法
Oct 04 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 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的FTP学习(一)
2006/10/09 PHP
加速XP搜索功能堪比vista
2007/03/22 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Python实现简单字典树的方法
2016/04/29 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
高中班长自我鉴定
2013/12/20 职场文书
副处级干部考察材料
2014/05/17 职场文书
安全生产标语
2014/06/06 职场文书
小学教师节活动总结
2015/03/20 职场文书
关于保护环境的建议书
2019/06/24 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL