質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

5353閲覧

Pythonでの多段SSH接続

shake123

総合スコア13

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2019/05/27 08:53

手元のPCから踏み台サーバー→分析サーバー→RedShiftび順にアクセスしてデータを取得したいのですが、どのように行えば良いのか調べても中々見つからないため質問させて頂きます。

サーバ構成

・EC2踏み台サーバー(IP:192.0.0.1, port:22)
・EC2分析サーバー(IP:192.0.0.2, port:3389)
・RedShift(port5439)

上記のサーバーを上から順に接続していきたいという内容になります。

途中まで書いてみたコードは下記のようになります。
知見のある方がいらっしゃいましたら、ご教授頂けますと幸いです。

(細部の情報は抜いています。)

import sqlalchemy import pandas as pd from sshtunnel import SSHTunnelForwarder import psycopg2 SSH_HOST1 = '192.0.0.1' SSH_PORT1 = 22 SSH_HOST_KEY1 = None SSH_USERNAME1 = 'user' SSH_PASSWORD1 = "user" SSH_PKEY1 = None SSH_HOST2 = '192.0.0.2' SSH_PORT2 = 3389 SSH_HOST_KEY2 = None SSH_USERNAME2 = 'user' SSH_PASSWORD2 = "user" SSH_PKEY2 = None DB_HOST = '*********ap-northeast-1.redshift.amazonaws.com' DB_PORT = "5439" DB_USER = '' DB_PASSWORD = '' DB_NAME = '' with SSHTunnelForwarder(SSH_HOST1, SSH_PORT1, ssh_host_key=SSH_HOST_KEY1, ssh_username=SSH_USERNAME1, ssh_password=SSH_PASSWORD1, ssh_pkey=SSH_PKEY1, remote_bind_address=(SSH_HOST2, SSH_PORT2), local_bind_address=('0.0.0.0', 10022)) as server1: with SSHTunnelForwarder(SSH_HOST2, SSH_PORT2, ssh_host_key=SSH_HOST_KEY2, ssh_username=SSH_USERNAME2, ssh_password=SSH_PASSWORD2, ssh_pkey=SSH_PKEY2, remote_bind_address=('127.0.0.1', 5439)) as server2: con = psycopg2.connect( host=DB_HOST, database=DB_NAME, port=DB_PORT, user=DB_USER, password=DB_PASSWORD ); data = pd.read_sql(SQL, con) print(data) con.close()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

pythonでやったことはないのですが、多段でつなぐなら、こんな感じかと思います。

  1. EC2踏み台サーバーに接続して、EC2分析サーバーへのトンネルを掘る

接続先: 192.0.0.1, 22
トンネル: local:127.0.0.1, 10022 → remote: 192.0.0.2, 3389

  1. 1.のトンネルを経由して、EC2分析サーバーに接続して、RedShiftへのトンネルを掘る

接続先: 127.0.0.1, 10022
トンネル: local:127.0.0.1, 5439 → remote: (RedShift), 5439

  1. 2.のトンネルを経由して、RedShiftに接続

psycopgの接続先: 127.0.0.1, 5439

投稿2019/05/29 11:49

編集2019/05/29 11:52
bsdfan

総合スコア4520

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shake123

2019/05/30 07:05

回答ありがとうございます! ご教授頂いた方法でもう一度試して見たいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問