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实现2048小游戏
Mar 30 Python
python中requests模块的使用方法
Apr 08 Python
Python中文件操作简明介绍
Apr 13 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
python画折线图的程序
Jul 26 Python
python Tkinter的图片刷新实例
Jun 14 Python
如何通过Django使用本地css/js文件
Jan 20 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
Django Model中字段(field)的各种选项说明
May 19 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
python基于opencv实现人脸识别
Jan 04 Python
pandas 实现将NaN转换为None
May 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php入门学习知识点三 PHP上传
2011/07/14 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
JavaScript基础知识之数据类型
2012/08/06 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
Python中enumerate函数代码解析
2017/10/31 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
python 带时区的日期格式化操作
2020/10/23 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
大学生志愿者感言
2014/01/15 职场文书
产品销售计划书
2014/05/04 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
工会经费申请报告
2015/05/15 职场文书
大队委员竞选稿
2015/11/20 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python