pitón reptil tutorial: Conexión de manera redis a través de la SSHTunnelForwarder túnel

Hoy pequeña para que todos puedan compartir el método de conexión de un pitón ReDiS por un túnel SSHTunnelForwarder, un buen valor de referencia, queremos ayuda. Venir a ver, para seguir la serie pequeña junto
Antecedentes: Nuestro servidor Redis a usar los servicios de Amazon, las necesidades locales por escalones, y luego tener acceso al servicio Redis.

principio de conexión: Utilice el módulo de SSHTunnelForwarder, ssh en escalones a través del puerto local 22, y luego abrir un reenvío de puerto local a una máquina remota trampolín uso de los servicios Redis.

Dos ideas:

1, por SSHTunnelForwarder, módulo paramiko, la primera máquina de rampa ssh y secadora en la rampa (o el servidor interno), permisos de acceso, entonces el Redis remoto.

2, utilizando el módulo SSHTunnelForwarder, la máquina local a través del trampolín SSH al puerto 22, y luego abrir un puerto local a un servicio de reenvío utiliza Redis trampolín de forma remota.

Un pensamiento:

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

similar:

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!')

Segundo método:

# 使用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() # 关闭隧道

Consejo:

máquina de trampolín general es una máquina limpia, la mayor parte de la red de la empresa o el servidor no tiene permiso para clientes Redis-cliente
recomendar nuestro aprender Python hebilla qun: 913066266, vistazo a la forma de la tercera edad están aprendiendo! Desde guión básico pitón de desarrollo web para, reptiles, Django, minería de datos, etc. [PDF, el código fuente real], proyectos a los datos de combate basado en cero están terminando. Dado a cada socio pitón poco! Cada día, Daniel explicar la tecnología de sincronización de Python, para compartir algunas de las formas de aprender y la necesidad de prestar atención a los pequeños detalles, haga clic para unirse a nuestro alumno reunión pitón

Este método de conexión se describe anteriormente pitón REDIS por túnel SSHTunnelForwarder es pequeña serie para compartir el contenido completo de la totalidad de la

Publicado siete artículos originales · ganado elogios 1 · vistas 3557

Supongo que te gusta

Origin blog.csdn.net/haoxun12/article/details/104954808
Recomendado
Clasificación