Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tunel SSH z Pythona zamyka się automatycznie

Zgodnie z steven-rumbalski komentarz powyżej:

Zamień: with SSHTunnelForwarder(...) as server
Z: server = SSHTunnelForwarder(...)
Następnie zawiń: server.start() ... server.stop()
wokół kodu, który chcesz wysłać przez tunel SSH.

Oto przekonwertowany kod:

import pymysql, shlex, shutil, subprocess
import logging
import sshtunnel
from sshtunnel import SSHTunnelForwarder
import iot_config as cfg

def OpenSSHTunnel():
    global server
    sshtunnel.DEFAULT_LOGLEVEL = logging.DEBUG
    server = SSHTunnelForwarder(
        (cfg.sshconn['host'], cfg.sshconn['port']),
        ssh_username = cfg.sshconn['user'],
        ssh_private_key = cfg.sshconn['private_key_loc'],
        ssh_private_key_password = cfg.sshconn['private_key_passwd'],
        remote_bind_address = ('127.0.0.1', 3306)
    )

def OpenRemoteDB():
    global remotecur, remotedb
    remotedb = None
    remotedb = pymysql.connect(
        host='127.0.0.1',
        user=cfg.remotedbconn['user'],
        passwd=cfg.remotedbconn['passwd'],
        db=cfg.remotedbconn['db'],
        port=server.local_bind_port
    )
    remotecur = remotedb.cursor()
    print("Checkpoint 1")

def SyncActions():
    print("Checkpoint 2")
    # this should now work as expected
    remotecur.execute("SELECT ActionID, Description FROM cmAction")
    for r in remotecur:
        print(r)

# Main program starts here
OpenSSHTunnel()
server.start()
OpenRemoteDB()
SyncActions()
server.stop()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykład wstrzyknięcia PHP/MySQL

  2. Usuń dane z bazy danych MySQL

  3. Metoda table_exists() może nie działać poprawnie

  4. Procedura składowana mysql jest 20 razy wolniejsza niż standardowe zapytanie

  5. PHP CRUD Twórz, edytuj, aktualizuj i usuwaj posty za pomocą bazy danych MySQL