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使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
python字符串过滤性能比较5种方法
Jun 22 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
书单|人生苦短,你还不用python!
Dec 29 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python简单操作excle的方法
Sep 12 Python
python全栈知识点总结
Jul 01 Python
Python之修改图片像素值的方法
Jul 03 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
Python文件夹批处理操作代码实例
Jul 21 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/10/02 PHP
隐性调用php程序的方法
2015/06/13 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
Numpy数组的广播机制的实现
2020/11/03 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
小孩百日宴答谢词
2014/01/15 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
法制宣传口号
2014/06/16 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
慰问信格式
2015/02/14 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js