PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thiết lập đường hầm SSH với Paramiko để truy cập PostgreSQL

Sử dụng chuyển tiếp cổng SSH.

Sửa đổi mã từ SSH lồng nhau bằng Python Paramiko đối với đường hầm cơ sở dữ liệu, bạn nhận được một đoạn mã như sau:

# 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))

Nếu cơ sở dữ liệu PostgreSQL chạy trên chính máy chủ SSH, thì nó thường chỉ lắng nghe trên giao diện loopback. Trong trường hợp đó db_host nên được đặt thành localhost .

Mặc dù lưu ý rằng sshtunnel chỉ là một lớp bao bọc xung quanh Paramiko. Vì vậy, nói chung, bạn có thể sử dụng nó để đơn giản hóa mã, trừ khi bạn có một số hạn chế ngăn bạn cài đặt các gói bổ sung.

Ví dụ: Kết nối với cơ sở dữ liệu PostgreSQL thông qua SSH tunneling trong Python

Dựa trên câu hỏi tương tự về MongoDB:
Kết nối và truy vấn cơ sở dữ liệu Mongo qua SSH với khóa riêng bằng Python
.

Cảnh báo bắt buộc:Không sử dụng AutoAddPolicy - Bạn đang mất khả năng bảo vệ khỏi các cuộc tấn công MITM bằng cách làm như vậy. Để có giải pháp chính xác, hãy xem Paramiko "Máy chủ không xác định" .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chạy tập lệnh sau điểm nhập vùng chứa trong docker-soạn

  2. Khi nào thì chọn khóa và mở khóa cập nhật?

  3. @JoinColumn là gì và nó được sử dụng như thế nào trong Hibernate

  4. Cách khác để truyền varbit thành int? Và bigint?

  5. SQL:Tạo bản ghi đầy đủ từ 2 bảng