Python의 sshtunnel에서 전달 포트

포트로 전송하면 서로 다른 네트워크의 컴퓨터와 통신할 수 있다.
파이톤의 sshtunnel 포장으로 포트 전송을 했습니다.

컨디션

  • Raspberry pi3 x3
  • Python 3.8
  • 프로비저닝


    로컬 Raspi0, Sstunnel Raspi1 준비, 센서 Raspi2 준비.Raspi0에서 Raspi1까지 Sstunnel을 구축하여 플러그인 통신을 통해 Raspi2에서 데이터를 얻습니다.local_bind_port 50000, sensor포트는 12345입니다.

    코드


    import os
    import time
    from datetime import datetime, timezone
    from influxdb import InfluxDBClient
    from requests.api import get
    import socket_client
    from sshtunnel import SSHTunnelForwarder
    import socket
    import pickle
    import numpy as np
    
    # socket通信を組み立てる関数。引数はtunnel。
    def create_client(tunnel0):
        client0 = socket_client.SocketClient("127.0.0.1", tunnel0.local_bind_port)
        client0.connect()
        return client0
    
    # socket通信でデータを受信する関数。
    def recv_data(client1):
        # サーバーからレスポンスを受ける。
        response = client1.send_rcv()
        data = pickle.loads(response)
        return data
    
    SENSOR_IP = {'sensor_0': '192.168.xx.xx'}
    SENSOR_PORT = {'sensor_0': 12345}
    
    HUB_IP = "10.xx.xx.xx"
    LOCALBIND_PORT = 12345
    
    with SSHTunnelForwarder((HUB_IP, 22), 
    ssh_host_key=None, 
    ssh_username="pi", 
    ssh_pkey="/home/pi/.ssh/public_key", 
    remote_bind_address=(SENSOR_IP["sensor_0"], SENSOR_PORT["sensor_0"]), 
    local_bind_address=("0.0.0.0", LOCALBIND_PORT)) as tunnel:
        client = create_client(tunnel)
        data = recv_data(client)
        print(data)
    
    

    좋은 웹페이지 즐겨찾기