如何使用堡垒主机通过 SSH 连接到 Redshift

Posted

技术标签:

【中文标题】如何使用堡垒主机通过 SSH 连接到 Redshift【英文标题】:How to use bastion host to SSH to Redshift 【发布时间】:2018-12-19 12:06:02 【问题描述】:

我一直试图弄清楚如何在 Amazon Redshift 集群是私有而不是公开访问时连接它们。我正在尝试将数据从我们当前的 mysql 数据库安全地移动到 Redshift 中的集群。目前我有一个 Python 脚本,它创建数据的 CSV,将其放入 S3,为数据创建一个表,然后使用 COPY 将其放入 Redshift。我们正在使用 Python 脚本来自动化该过程。

但是,当集群设置为私有时,我完全无法与 Redhsift 建立连接。我做了一些挖掘,发现 SSH 隧道是一种潜在的解决方案。据我所知,虽然 Redshift 不支持 SSH,但可以使用堡垒主机通过运行 psql 的 ec2 实例进行连接。问题是我需要在 Python 脚本中执行此操作,以使该过程尽可能自动化。

我创建了一个 ec2 实例并使用 PuTTY 将 psql 加载到它,但是我不确定如何将该实例用作堡垒主机,即连接到它并使用它连接到 Redshift,以及如何实际执行此操作如果可能的话,在 python 脚本中。有没有人做过类似的事情或知道如何连接到 ec2 以及从 ec2 到 redshift?

【问题讨论】:

【参考方案1】:

堡垒将仅用于将请求从您自己的计算机转发到 Amazon Redshift。您确实不需要在堡垒上安装任何软件(例如psql)。

假设您可以成功使用 PuTTY 登录 Bastion,在 PuTTY 中更改此配置:

转到隧道配置页面 源端口: 5439 目标: Redshift 集群的完整 DNS 名称,后跟 :5439 点击添加 保存您的 PuTTY 设置

这是来自Connecting to a Redshift Cluster with a Private IP的图片:

此配置显示:“通过 SSH 连接将本地端口 5439 重定向到堡垒服务器。让堡垒从那里将流量发送到 REDSHIFT-DNS:5439。”

因此,Bastion 就像一个 Jump Box,转发您的流量而不实际运行其他任何东西。

您可以将本地源端口更改为您喜欢的任何端口,这样您就可以在同一个 SSH 连接上拥有多个隧道。

【讨论】:

以上是关于如何使用堡垒主机通过 SSH 连接到 Redshift的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 客户端通过 AWS 堡垒主机连接到 MySQL RDS 实例

使用 Python Paramiko 通过双 SSH 隧道连接到数据库

使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例

堡垒主机连接到 rds 所需的忘记的密钥对

如何使用 Fabric 通过 2 个网关将 SSH 隧道连接到远程主机?

如何通过主机从外部通过 SSH 连接到 VirtualBox 来宾? [关闭]