通过多个SSH跳转查询Redshift

我想从我的笔记本电脑上运行的IDE(IntelliJ)查询AWS Redshift群集。 这个集群只能从VPC中的一个EC2实例直接访问。

在这里输入图像说明

EC2实例不能直接从我的笔记本电脑访问:有必要ssh到我们的数据中心的另一台服务器,然后ssh到我们的VPC的EC2实例,以便通过psql客户端在Reshift集群上运行查询。 其他用户和cron shell脚本也可以从同一个EC2实例在这个集群上执行命令。

我想从我的笔记本电脑,通过我们的数据中心中的中间服务器,到EC2实例,并最终到Redshift群集设置SSH隧道,而不会影响其他用户/脚本。

我试过这个:

 ssh -fNL 5439:localhost:22 host_in_datacenter ssh -fNL 22:localhost:22 ec2_instance ssh -fNL 22:localhost:5439 reshift_host 

其中返回:

 [08P01] Protocol error. Session setup failed. 

…当我尝试通过客户端连接。

大部分访问远程数据库的SSH链接示例,只有一个跳到运行数据库的主机,最后一跳最终在数据库主机上。

是否可以在不影响其他用户的情况下创buildSSH隧道,从笔记本电脑到Redshift群集? 如果是这样,你能看到我在做什么错了吗?

看起来好像你可能不了解SSH转发语法。 请不要亲自这样做,但这是复制/粘贴软件开发和系统pipe理如此危险的一个很好的例子。 人们可以在网上find如何做事的例子,而不必费心研究实际发生的事情。

我们来分解一下你的命令的一部分:

 ssh -fNL 5439:localhost:22 host_in_datacenter 

这意味着采取localhost:5439上的stream量,并转发到您ssh'ing服务器上的端口22。 这没有任何意义,也不会工作,因为它是侦听端口22的SSH服务器,它不知道如何处理非SSHstream量。

你想要做的是挑选另一个随机的高端口,并通过你的链条传递stream量。 像这样的东西:

 ssh -fNL 5439:localhost:12345 host_in_datacenter ssh -fNL 12345:redshift_host:12345 ec2_instance 

老实说,这是非常糟糕的。 如果我是你,我可能会崩溃你的networking,所以你只需要通过一台主机到Redshift 在AWS中build立一个VPN,这样你就可以直接从你的工作站连接。