Bagaimana saya bisa menggunakan tunneling port untuk terhubung ke instance database pribadi melalui benteng jaringan?

12

Saya memiliki benteng jaringan yang dapat diakses publik di example.compute-1.amazonaws.comdan contoh database postgres pribadi dipostgres.example.us-east-1.rds.amazonaws.com:5432

Saya bisa ssh ke dalam benteng menggunakan

$ ssh -i key.pem [email protected]

Lalu begitu saya berada di benteng saya membuat terowongan ssh dengan:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 [email protected]

Saya kemudian dapat memverifikasi bahwa terowongan berfungsi dengan menghubungkan ke database dari benteng menggunakan localhost:

$ psql -p 5432 -h localhost -U postgres

Namun, saya tidak dapat terhubung ke database dari jarak jauh (tanpa berada di benteng).

$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?

Saya telah mengkonfigurasi grup keamanan bastion untuk menerima lalu lintas masuk pada port 5432.

Apakah saya menggunakan ssh -Ldengan benar? Haruskah saya menggunakannya di luar benteng? Saran apa pun akan sangat dihargai.

Snubber
sumber

Jawaban:

20

Saat Anda membuat terowongan SSH, itu tidak membuka port yang terbuka ke dunia luar. Port yang dibuka, hanya tersedia sebagai localhost. Jadi secara efektif apa yang telah Anda lakukan adalah membuat terowongan dari benteng Anda, ke benteng Anda.

Sebaliknya, apa yang ingin Anda lakukan adalah membuat terowongan dari komputer lokal Anda melalui benteng Anda.

Jadi, Anda membuat terowongan Anda sebagai bagian dari koneksi Anda dari komputer lokal ke benteng Anda . Anda tidak perlu membuat koneksi SSH lain.

Jadi, secara lokal, Anda akan menjalankan:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 [email protected]

Dengan asumsi postgres.example.us-east-1.rds.amazonaws.com memutuskan untuk alamat IP pribadi.

Kemudian untuk terhubung ke server Anda, masih secara lokal, hubungkan seolah-olah server itu lokal:

$ psql -p 5432 -h localhost -U postgres

Melakukan ini, tidak perlu menggunakan prompt di benteng Anda.

Matt Houser
sumber
Ini berhasil untuk saya, terima kasih! Satu hal yang saya lupa untuk siapa saja yang perintah psql hanya hang di sana: Pastikan bahwa grup keamanan db Anda memungkinkan akses dari benteng.
Goran
-1

Ini berhasil untuk saya. Pastikan Anda memiliki klien psql diinstal secara lokal.

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

Saat membuat instance db Anda pada aws, pastikan untuk mendefinisikan yang berikut:

  1. nama pengguna
  2. kata sandi
  3. nama basis data
  4. nomor port

Saya juga harus membuat grup keamanan untuk VPC dimana database berada. Setelah membuatnya pastikan instance db Anda menggunakan ini untuk grup keamanannya. Grup keamanan memiliki aturan berikut:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0
timxor
sumber
Itu tidak melalui benteng, kan? Anda hanya terhubung langsung ke RDS
RhysC
Ia melewati vpc yang instance rds diekspos melalui. Anda melampirkan vpc ke instance rds pada saat pembuatan.
timxor
Ya saya pikir pertanyaan aslinya adalah berkenaan dengan pergi melalui server benteng di VPC sehingga contoh RDS tidak terbuka untuk umum (baik itulah cara saya membacanya)
RhysC
Itu bukan pertanyaan dan jawaban Anda tidak membantu menyelesaikan masalah sama sekali.
Radko Dinev