sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLにアクセスするためにParamikoでSSHトンネルを設定する

    SSHポートフォワーディングを使用します。

    PythonParamikoを使用してネストされたSSH からコードを変更する データベーストンネリングの場合、次のようなコードを取得します。

    # establish SSH tunnel
    self.ssh = paramiko.SSHClient()
    # ...
    self.ssh.connect(hostname=ssh_host, username=ssh_user, password=ssh_password)
    
    transport = ssh_client.get_transport()
    dest_addr = (db_host, db_port)
    local_unique_port = 4000 # any unused local port
    local_host = 'localhost'
    local_addr = (local_host, local_unique_port)
    vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr, local_addr)
    
    self.engine = create_engine(
        'postgres+psycopg2://{}:{}@{}:{}/{}'.format(
            db_user, db_password, local_host, local_unique_port, db))
    

    PostgreSQLデータベースがSSHサーバー自体で実行されている場合、通常はループバックインターフェイスでのみリッスンします。その場合、db_host localhostに設定する必要があります 。

    ただし、 sshtunnel Paramikoの単なるラッパーです。したがって、一般的に、追加のパッケージをインストールすることを妨げるいくつかの制限がない限り、コードを単純化するためにそれを使用できます。

    例:PythonのSSHトンネリングを介したPostgreSQLデータベースへの接続

    MongoDBに関する同じ質問に基づく:
    Mongoデータベースに接続してクエリを実行するPythonの秘密鍵を使用したSSH

    必須の警告:AutoAddPolicyは使用しないでください -MITM攻撃 に対する保護が失われています。 そうすることによって。正しい解決策については、 Paramiko "UnknownServer" を参照してください。




    1. NetBeans。ホスティングデータベースに接続します

    2. Node.js:SequelizeでのPostgresスキーマの定義

    3. MySQLアサーションのような制約

    4. MySQLは、別のテーブルにないテーブルから特定のエントリを選択します