Gunakan penerusan port SSH.
Memodifikasi kode dari SSH bersarang menggunakan Python Paramiko untuk tunneling database, Anda mendapatkan kode seperti ini:
# 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))
Jika database PostgreSQL berjalan di server SSH itu sendiri, biasanya database tersebut hanya akan mendengarkan pada antarmuka loopback. Dalam hal ini db_host
harus disetel ke localhost
.
Meskipun perhatikan bahwa sshtunnel
hanyalah pembungkus di sekitar Paramiko. Jadi secara umum, Anda dapat menggunakannya untuk menyederhanakan kode, kecuali Anda memiliki beberapa batasan yang mencegah Anda menginstal paket tambahan.
Misalnya:Menghubungkan ke database PostgreSQL melalui tunneling SSH dengan Python
Berdasarkan pertanyaan yang sama tentang MongoDB:
Hubungkan dan kueri database Mongo SSH dengan kunci pribadi di Python
.
Peringatan wajib:Jangan gunakan AutoAddPolicy
- Anda kehilangan perlindungan terhadap serangan MITM
dengan melakukan itu. Untuk solusi yang tepat, lihat Paramiko "Server Tidak Dikenal"
.