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实现simhash算法实例
Apr 25 Python
windows下wxPython开发环境安装与配置方法
Jun 28 Python
Django中使用group_by的方法
May 26 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
单链表反转python实现代码示例
Feb 08 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
Python内置函数reversed()用法分析
Mar 20 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
Python实现的建造者模式示例
Aug 06 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
Python configparser模块应用过程解析
Aug 14 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 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php 如何获取数组第一个值
2013/08/06 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
js评分组件使用详解
2017/06/06 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
nodejs初始化init的示例代码
2018/10/10 NodeJs
记一次react前端项目打包优化的方法
2020/03/30 Javascript
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python模块导入的细节详解
2018/12/10 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
Python实现疫情地图可视化
2021/02/05 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
2016元旦晚会主持词
2015/07/01 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android