Como posso usar o tunelamento de porta para conectar-me a uma instância de banco de dados privada por meio de um bastião de rede?

10

Eu tenho um bastião de rede que está publicamente acessível em example.compute-1.amazonaws.com e uma instância de banco de dados postgres privada em postgres.example.us-east-1.rds.amazonaws.com:5432

Eu posso ssh no bastião usando

$ ssh -i key.pem [email protected]

Então, quando eu estiver no bastião, eu crio um túnel ssh com:

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

Posso então verificar se o túnel funciona conectando-se ao banco de dados a partir do bastião usando localhost:

$ psql -p 5432 -h localhost -U postgres

No entanto, não consigo me conectar ao banco de dados remotamente (sem estar no bastião).

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

Configurei o grupo de segurança do bastião para aceitar o tráfego de entrada na porta 5432.

Estou usando ssh -L corretamente? Devo usá-lo fora do bastião? Qualquer conselho seria muito apreciado.

    
por Snubber 14.06.2016 / 19:21

2 respostas

14

Quando você cria um túnel SSH, ele não expõe a porta aberta ao mundo externo. A porta aberta está disponível apenas como localhost . Então, efetivamente, o que você fez foi criar um túnel do seu bastião para o seu bastião.

Em vez disso, o que você quer fazer é criar um túnel do seu computador local através do seu bastião.

Então, você cria seu túnel como parte de sua conexão do seu computador local para o seu bastião . Você não precisa criar outra conexão SSH.

Então, localmente, você executaria:

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

Assumindo que postgres.example.us-east-1.rds.amazonaws.com resolve o endereço IP privado.

Em seguida, para se conectar ao seu servidor, ainda localmente, conecte-se como se o servidor fosse local:

$ psql -p 5432 -h localhost -U postgres

Fazendo isso, não há necessidade de usar um prompt no seu bastião.

    
por 15.06.2016 / 03:19
-1

Isso funcionou para mim. Certifique-se de ter cliente psql instalado localmente.

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

Ao criar sua instância db no aws, defina o seguinte:

  1. nome de usuário
  2. senha
  3. nome do banco de dados
  4. número da porta

Também tive que criar um grupo de segurança para o VPC no qual o banco de dados estava localizado. Depois de criá-lo, verifique se a instância do db usa isso para o grupo de segurança. O grupo de segurança tem as seguintes regras:

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
    
por 04.01.2017 / 22:30