香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

python 通过SSHTunnelForwarder隧道连接redis的方法


时间:2022-04-02 10:17 作者:admin610456


背景:我司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 paramikofrom sshtunnel import SSHTunnelForwarderwith 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隧道,通过跳板机链接Rediswith 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/' target='_blank'>python.org/pypi/sshtunnel/

以上这篇Python 通过SSHTunnelForwarder隧道连接redis的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)