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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SSH

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

Q&A

解決済

1回答

4416閲覧

多段SSHのポートフォワードでDBにアクセスしたい。

teityura

総合スコア84

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SSH

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

0グッド

4クリップ

投稿2018/10/26 14:00

多段SSHのポートフォワードで、
開発用PC(1.1.1.10) -> 踏み台1(1.1.1.11) -> 踏み台2(1.1.1.12) -> DB(1.1.1.13)
のDBに接続したいですが、この設定方法が分かりません。

SSHポートフォワードの仕組みや、
LocalFowardの書式を理解できていないかもしれません。

設定が間違っていれば、教えていただけませんでしょうか。
あるいは、合っているなら、どこから切り分けていけばいいでしょうか。

# ~/.ssh/config # humi1 Host humi1 Hostname 1.1.1.11 User humi-user1 LocalForward 55552 1.1.1.12:55551 # humi2 Host humi2 Hostname 1.1.1.12 User humi-user2 ProxyCommand ssh humi1 -W %h:%p LocalForward 55551 1.1.1.13:3306

と上記のように、設定しておき、

# ターミナル上で実行 ssh humi2 # 1. 別ターミナル上でトンネルを掘る -> 下記エラーが出る ==================================================================== Host key fingerprint # humi1のフィンガープリント Host key fingerprint # humi2のフィンガープリント bind: Cannot assign requested address channel_setup_fwd_listener: cannot listen to port: 55551 Could not request local forwarding. ====================================================================

デバック情報は下記のような感じでした。

root@devPC ~# mysql -u user -ppassword -P55552 ERROR 1045 (28000): Access denied for user 'user'@'password' (using password: YES) root@devPC ~# netstat -anp | grep 29 tcp 0 0 127.0.0.1:29291 0.0.0.0:* LISTEN 27639/ssh [humi-user1@humi2 ~]$ netstat -anp | grep 29 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) [humi-user2@humi2~]$ netstat -anp | grep 2929 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 127.0.0.1:29291 0.0.0.0:* LISTEN 2990/ssh tcp 0 0 ::1:29291 :::* LISTEN 2990/ssh

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、humi1 の LocalForward は不要だと思います。

ssh humi2 で channel_setup_fwd_listener: cannot listen to port: 55551 が出る場合には、netstat -nap とかで devPC 上で 55551 を Listen しているプロセスを確認しましょう。
そのプロセスを kill するか、他のポートを使うか処置をします。

ちなみに、本題から少し離れますが、私の環境では似たような設定で同じようなことが実現できていますが、なぜか mysql -P でポートを指定しても、この指定は無視されるようでローカルで動いている mysql につなぎに行きます。
mysql -h localhost -P でも同様です。
mysql -h 127.0.0.1 -P でようやく期待した動きになったことがあります。
ご参考まで。

投稿2018/10/27 04:26

ssasaki

総合スコア1167

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

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

CHERRY

2018/10/27 04:38

横から、本題から逸れた部分に対してですが... mysql コマンドは、接続先がlocalhost の場合、接続先にソケット接続を使う仕様になっていますので、ポート指定は無視されます。( --protocol=TCP を指定すれば、ポートの指定も有効になります。) IPアドレス指定の場合は、TCP 接続になるので、ポートの指定も有効になります。
ssasaki

2018/10/27 04:50

CHERRYさん、コメントありがとうございます。もともとそのような仕様なのですね。 というわけで、接続検証の際はご注意ください。 掲載されている root@devPC ~# mysql -u user -ppassword -P55552 ERROR 1045 (28000): Access denied for user 'user'@'p という形式だとトンネル設定がうまくいっていても接続できません。
CHERRY

2018/10/27 05:00

一応、リファレスンスとしては、 https://dev.mysql.com/doc/refman/5.6/ja/connecting.html の以下の部分かな。 > Unix では、MySQL プログラムはホスト名 localhost を、ほかのネットワークベースのプログラムと比較して想定されるのとはおそらく異なる、特別な方法で扱います。localhost への接続で、MySQL プログラムは Unix ソケットファイルを使用してローカルサーバーに接続しようとします。これは、ポート番号を指定するために --port または -P オプションが与えられた場合にも生じます。クライアントがローカルサーバーに TCP/IP 接続を行うことを保証するには、--host または -h を使用して、ホスト名の値 127.0.0.1、またはローカルサーバーの IP アドレスまたは名前を指定します。--protocol=TCP オプションを使用して、localhost に対しても、接続プロトコルを明示的に指定することもできます。
teityura

2018/10/27 09:53 編集

お二方ともありがとうございました。 humi1 の LocalForward は不要で、 mysql -u user -ppassword -P55551 -h 127.0.0.1 とすれば、DBにアクセスできました! mysql -u user -ppassword -P55551 -h localhost ができないなんて、罠ですね。 bind: Cannot assign requested address については、 LocalForward 55551 1.1.1.13:3306 を LocalForward 127.0.0.1:55551 1.1.1.13:3306 にすると、IPv4を指定できたみたいですが、 LocalForward localhost:55551 1.1.1.13:3306 では、指定できないようです。これも罠ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問