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 相关文章推荐
Tensorflow简单验证码识别应用
May 25 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
pandas数据集的端到端处理
Feb 18 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
Python私有属性私有方法应用实例解析
Sep 15 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
Add a Table to a Word Document
2007/06/15 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
js module大战
2019/04/19 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
python去掉行尾的换行符方法
2017/01/04 Python
PyCharm代码格式调整方法
2018/05/23 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
模具专业推荐信
2013/10/30 职场文书
外贸英语毕业生自荐信
2013/11/14 职场文书
社区七一党员活动方案
2014/01/25 职场文书
经典演讲稿开场白
2014/08/25 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL