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中operator模块的操作符使用示例总结
Jun 28 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
Python使用wget实现下载网络文件功能示例
May 31 Python
python中的json总结
Oct 11 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
Flask中endpoint的理解(小结)
Dec 11 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
Python中requests做接口测试的方法
May 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
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
浅析javascript 定时器
2014/12/23 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
jQuery实现日历效果
2020/09/11 jQuery
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
tensorflow实现KNN识别MNIST
2018/03/12 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
python中调试或排错的五种方法示例
2019/09/12 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
自荐信范文
2013/12/10 职场文书
银行员工职业规划范文
2014/01/21 职场文书
四年级学生评语大全
2014/04/21 职场文书
导航工程专业自荐信
2014/09/02 职场文书
年终工作总结范文2014
2014/11/27 职场文书
2015年班干部工作总结
2015/04/29 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫