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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
Python中的pack和unpack的使用
Mar 12 Python
python 输出上个月的月末日期实例
Apr 11 Python
pygame实现简易飞机大战
Sep 11 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
什么是Python中的顺序表
Jun 02 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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日历[测试通过]
2008/03/27 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
拖动一个HTML元素
2006/12/22 Javascript
javascript不同页面传值的改进版
2008/09/30 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
js控制table合并具体实现
2014/02/20 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Python实现端口复用实例代码
2014/07/03 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python获取交互式ssh shell的方法
2019/02/14 Python
python远程连接MySQL数据库
2019/04/19 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
python各种excel写入方式的速度对比
2020/11/10 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
简历中个人求职的自我评价模板
2013/11/29 职场文书
《去年的树》教学反思
2014/04/11 职场文书
公司员工管理制度
2015/08/04 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript