隧道转移到红移集群

时间:2018-11-19 15:35:58

标签: amazon-web-services amazon-ec2 amazon-redshift ssh-tunnel tunnel

我是Redshift的新手。目前,我能够创建一个Redshift集群并通过SQL Workbench将其连接,但我希望从我的MAC终端通过ssh来隧道化我的redshift集群。我做了一些研究,并能够使用与我用来创建Redshift集群相同的VPC ID和子网组来创建ec2实例。我已经在ec2实例上安装了psql。当我使用psql命令连接到redshift时,我无法理解我要去哪里:

psql -h my redshift endpoint -p 5439 -d database name -U user -c " my query "

它给我错误psql:无法将主机名“我的redshift端点”转换为地址:名称或服务未知

3 个答案:

答案 0 :(得分:2)

第一步是使用ssh,通过将本地端口转发到远程端口的命令来隧道连接到EC2实例:

ssh -i KEYPAIR.pem -L 5439:REDSHIFT-ENDPOINT:5439 ec2-user@EC2-PUBLIC-IP

位置:

  • KEYPAIR.pem 应该是用于访问EC2实例的密钥对的名称
  • REDSHIFT-ENDPOINT 是Redshift端点的DNS名称
  • EC2-PUBLIC-IP 是EC2实例的IP地址

此命令说:

  • 使用密钥对创建ssh连接
  • 将发送到本地端口5439的所有流量转发到远程计算机,然后让远程计算机将该流量发送到REDSHIFT-ENDPOINT:5439(将端点替换为 REDSHIFT-ENDPOINT

然后,您可以连接localhost:5439上的Redshift,就像它在您自己的计算机上运行一样。该流量将发送到远程计算机,然后将其发送到REDSHIFT-ENDPOINT:5439

例如,如果您想使用psql连接到Redshift,请使用:

psql -h localhost -p 5439 -U <username>

答案 1 :(得分:0)

尝试psql -h localhost -p 5439 -d -U -c " my query "psql -p 5439 -d -U -c " my query ",您不能在没有参数的情况下使用开关-h,如果不使用参数,则默认为localhost

答案 2 :(得分:0)

感谢John Rotenstein给我的见解,我实际上错过了与我的安全组关联的入站规则,该规则仅允许来自redshift专用IP的流量。我的ec2实例和redshift都在同一VPC中,因此应该使用私有IP代替公共IP。还忘记了将shift的ssh公钥放入ec2的授权密钥文件中。一旦我做到了,它就会起作用。