У меня есть сетевой бастион, который общедоступен, example.compute-1.amazonaws.comи частный экземпляр базы данных postgres вpostgres.example.us-east-1.rds.amazonaws.com:5432

Я могу подключиться к бастиону по ssh, используя

$ ssh -i key.pem [email protected]

Затем, когда я нахожусь в бастионе, я создаю туннель ssh с помощью:

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

Затем я могу проверить, что туннель работает, подключившись к базе данных из бастиона с помощью 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правильно использую ? Стоит ли использовать его вне бастиона? Любые советы будут высоко ценится.

answer

Когда вы создаете туннель SSH, он не открывает открытый порт для внешнего мира. Открытый порт доступен только как localhost. По сути, вы построили туннель от своего бастиона к своему бастиону.

Вместо этого вы хотите создать туннель с локального компьютера через бастион.

Итак, вы создаете свой туннель как часть соединения от локального компьютера к бастиону . Вам не нужно создавать другое SSH-соединение.

Итак, локально вы должны выполнить:

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

Предполагая, что postgres.example.us-east-1.rds.amazonaws.com преобразуется в частный IP-адрес.

Затем, чтобы подключиться к вашему серверу, по-прежнему локально, подключитесь, как если бы сервер был локальным:

$ psql -p 5432 -h localhost -U postgres

При этом нет необходимости использовать подсказку на вашем бастионе.

Это сработало для меня. Убедитесь, что у вас установлен клиент psql локально.

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

При создании экземпляра базы данных на aws обязательно определите следующее:

  1. имя пользователя
  2. пароль
  3. имя базы данных
  4. номер порта

Мне также пришлось создать группу безопасности для VPC, в котором находилась база данных. После ее создания убедитесь, что ваш экземпляр базы данных использует ее для своей группы безопасности. В группе безопасности действуют следующие правила:

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