PostgreSQL'e erişmek için Paramiko ile SSH tünelini kurun
Şu anda bir SFTP sunucusuna erişmek ve aynı sunucu üzerindeki PostgreSQL'e bağlanmak için Paramiko kullanıyorum. sshtunnelPostgreSQL'de oturum açmak için kullanılan birçok örnek buldum . Ama bunu saf Paramiko ile nasıl yapacağımı bilmiyorum.
Şu anda kodum şuna benzer:
# establish SSH tunnel
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(hostname=host, username=user, password=password)
# setup SFTP server
self.sftp = self.ssh.open_sftp()
# connect to datebase
self.engine = create_engine('postgres+psycopg2://{}:{}@{}:{}/{}'.format(user, password, host, port, db))
Herhangi bir öneriniz için teşekkürler!
Yanıtlar
SSH bağlantı noktası yönlendirmeyi kullanın.
Veritabanı tünellemesi için Python Paramiko kullanarak İç içe SSH'den kodu değiştirmek, aşağıdaki gibi bir kod alırsınız:
# 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 veritabanı SSH sunucusunun kendisinde çalışıyorsa, genellikle yalnızca geri döngü arayüzünü dinler. Bu durumda db_hostolarak ayarlanmalıdır localhost.
Yine de sshtunnel, bunun Paramiko'nun etrafındaki bir paket olduğuna dikkat edin . Bu nedenle, ek paketler kurmanızı engelleyen bazı kısıtlamalarınız yoksa, genel olarak kodu basitleştirmek için kullanabilirsiniz.
Örneğin: Python'da SSH tünelleme yoluyla PostgreSQL veritabanına bağlanma
MongoDB ile ilgili aynı soruya dayanarak:
Python'da özel anahtarla SSH üzerinden Mongo veritabanına bağlanın ve sorgulayın .
Zorunlu uyarı: Kullanmayın AutoAddPolicy- Bunu yaparak MITM saldırılarına karşı korumayı kaybediyorsunuz . Doğru çözüm için bkz. Paramiko "Bilinmeyen Sunucu" .