Як можна використовувати тунелювання портів для підключення до примірника приватної бази даних через мережевий бастіон?


12

У мене є мережевий бастіон, який є загальнодоступним в example.compute-1.amazonaws.comі приватний екземпляр бази даних postgrespostgres.example.us-east-1.rds.amazonaws.com:5432

Я можу вступити в бастіон за допомогою

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

Потім, коли я перебуваю в бастіоні, я створюю ssh тунель з:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

Потім я можу перевірити, чи працює тунель, підключившись до бази даних з бастіону за допомогою localhost:

$ psql -p 5432 -h localhost -U postgres

Однак я не можу віддалено підключитися до бази даних (не перебуваючи в бастіоні).

$ 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?

Я налаштував групу безпеки бастіону для прийому вхідного трафіку на порт 5432.

Чи ssh -Lправильно я користуюся ? Чи варто використовувати його поза бастіоном? Будь-яка порада буде дуже вдячна.

Відповіді:


20

Коли ви створюєте тунель SSH, він не відкриває відкритий порт зовнішньому світу. Відкритий порт доступний лише як localhost. Настільки ефективно, що ви зробили, це створити тунель від вашого бастіону до вашого бастіону.

Натомість те, що ви хочете зробити, це створити тунель з вашого локального комп'ютера через ваш бастіон.

Отже, ви створюєте свій тунель як частину підключення від локального комп’ютера до бастіону . Вам не потрібно створювати інше з'єднання SSH.

Отже, локально, ви б виконали:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

Припустимо, що postgres.example.us-east-1.rds.amazonaws.com вирішує приватну IP-адресу.

Потім для підключення до вашого сервера, все ще локально, підключіться так, ніби сервер був локальним:

$ psql -p 5432 -h localhost -U postgres

Для цього не потрібно використовувати підказку на своєму бастіоні.


Це працювало для мене, дякую! Єдине, що я забув для тих, хто команду psql просто висить там: Переконайтеся, що ваша група безпеки db дозволяє отримати доступ з бастіону.
Горан

-1

Це працювало для мене. Переконайтеся, що у вас локально встановлений клієнт psql .

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

Створюючи свій екземпляр db в aws, обов'язково визначте наступне:

  1. ім'я користувача
  2. пароль
  3. ім'я бази даних
  4. номер порту

Я також повинен був створити групу безпеки для VPC, в якому знаходилася база даних. Після створення переконайтеся, що ваш екземпляр db використовує це для своєї групи безпеки. Група безпеки має такі правила:

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

Але це не йде через бастіон, правда? Ви просто підключаєтесь безпосередньо до RDS
RhysC

Він проходить через vpc, через який експонується екземпляр rds. Ви додаєте vpc до екземпляра rds при створенні.
timxor

Так, я думаю, що первісне питання
стосувалося

Це не було питання, і ваша відповідь зовсім не допомагає вирішити проблему.
Радко Дінев
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.