У меня есть сетевой бастион, который общедоступен по адресу example.compute-1.amazonaws.com
и частный экземпляр базы данных postgres по адресу postgres.example.us-east-1.rds.amazonaws.com:5432
Я могу войти в бастион по ssh, используя
$ 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
правильно? Стоит ли использовать его вне бастиона? Любые советы будут высоко ценится.
Когда вы создаете туннель 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 установлен локально.
psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName
При создании экземпляра db на aws обязательно определите следующее:
Мне также пришлось создать группу безопасности для 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