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 条件判断的缩写方法
Sep 06 Python
Python递归函数定义与用法示例
Jun 02 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Python算法中的时间复杂度问题
Nov 19 Python
python爬虫模块URL管理器模块用法解析
Feb 03 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
pandas 按日期范围筛选数据的实现
Feb 20 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学习教程之第1天
2008/06/15 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
javascript一点特殊用法
2008/05/28 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
JS实现拼图游戏
2021/01/29 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python 时间处理datetime实例
2008/09/06 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
Python while true实现爬虫定时任务
2020/06/08 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
教师现实表现材料
2014/02/14 职场文书
少年闰土教学反思
2014/02/22 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
yy婚礼主持词
2014/03/14 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python