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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

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

SSH

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

Q&A

解決済

1回答

788閲覧

LAN内CentOS7を踏み台にしてWeb上のmysqlへSSHポート転送でアクセス

mma2001

総合スコア1

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

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

SSH

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

0グッド

0クリップ

投稿2022/03/23 10:22

編集2022/03/23 13:54

やろうとしていること
LAN内CentOS7を踏み台にしてWeb上のmysqlへSSHポート転送でアクセス

以下、次のように表現します。

server.local・・・社内に設置されているLinuxサーバー(CentOS7)
server.mysql・・・レンタルサーバー会社から借りているVPSサーバー(CentOS7)
PC・・・ODBC経由でServer.mysqlからデータを取得したいWindowsPC

(社内LAN)   (internet)
PC----------router-----------server.mysql
server.local--+

mysqlを動かしているserver.mysqlは社内LANからしかアクセスできないようIPアドレスを制限したうえで22番(sshd)以外は塞いでいます。
またsshでのログインは鍵認証にしおり、接続ポートは10022に変更して運用しています。

この環境で上図のPCからserver.mysqlへのアクセスをするために、LAN内のserver.local上でsshのポート転送を利用し
PCからはserver.mysqlにアクセスをしたい、つまり踏み台にしてmysqlと通信したいと思っています。
SSHトンネル接続に対応したDBToolなどでは社内LANからserver.localへの接続が可能ですが、
今回はExcelからODBC経由でserver.mysqlからのデータ取得をするためにserver.localを踏み台サーバーにしようとしています。
※PC上でPuTTYなどを動かしポート転送する場合は接続可能ですが、今回は複数の社内PCからのアクセスを想定しているため
server.localを踏み台として利用することにしました

LAN内のserver.localで実行したコマンドは以下の通りです

$ ssh -p 10022 -f -N -L 20022:localhost:3306 -i ~/.key/{server.mysql.sshkeyfile} {server.mysql.ssh_user}@{server.mysql.host_domain}

コマンドはエラーなく実行できますが、mysqlとは通信ができません。

server.localで以下を実行

$ mysql -u {server.mysql.mysql_user} -p -h localhost -P 20022 Enter password: {mysql_userに対応したパスワードを入力} ERROR 1045 (28000): Access denied for user {server.mysql.mysql_user}@'localhost' (using password: YES)

となります。
ユーザーパスワードの入力に誤りはありません(クリップボード経由で張り付けています)

server.localのfirewalldについては20022を開放しています。

# firewall-cmd --zone=public --add-port=20022/tcp --permanent success # firewall-cmd --reload success # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp3s0 sources: {以下省略} ports: ****/tcp ****/tcp ****/tcp ****/tcp ****/tcp 20022/tcp {以下省略}

もちろんPCからのODBC経由でもアクセスできません。
原因として考えられることなどご教示いただけると助かります。よろしくお願いいたします。

追記します

server.local上からlsofすると上述したssh -Lのコマンドは通信を確立しているのを確認しています。

$ lsof -i | grep 10022 ssh 13193 user 3u IPv4 729110603 0t0 TCP {server.local.host_name}:53726->{server.mysql.host_name}:10022 (ESTABLISHED)

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

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

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

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

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

1T2R3M4

2022/03/23 12:52

現時点で問題となっているソースコードを提示してみては。
Y.H.

2022/03/23 13:21

これらは全て同じものですか?(mysqlサーバーが動作しているCentOS7 ?) ・「mysql(CentOS7)」 ・「LAN内のCentOS7」 ・「CentOSを踏み台」 ・「社内LAN内のCentOS」
mma2001

2022/03/23 13:24

言葉が揺らいでてわかりにくかったですね・・。 mysqlと記載しているものはVPSで借りているサーバー 社内・LAN内と記載しているものは会社内に設置されているサーバーです。 のちほど本文修正させていただきます。
Y.H.

2022/03/23 13:32

> 社内・LAN内と記載しているものは会社内に設置されているサーバーです。 複数の異なるものなのか、ひとつのものなのかも記載した方がいいです。 複数であれば server1.local server2.local とか仮でホスト名を記載されたほうがわかりやすいと思います。
mma2001

2022/03/23 13:54 編集

はい、アドバイスありがとうございます。そのようにさせていただきました。
TaichiYanagiya

2022/03/24 00:47 編集

server.mysql までは接続できて、ユーザー認証でエラーですので、{mysql_user}@localhost が許可されていないのでは? server.mysql のシェルから "mysql -u {mysql_user} -p -h localhost" でログインできますか? (追記) "mysql -u {mysql_user} -p -h 127.0.0.1" も。
mma2001

2022/03/24 09:16

回答ありがとうございます。 server.mysqlのシェルからですと、ユーザー・パスワードははserver.localと同じものでログイン可能です。 クリップボードからの貼り付けで確認していますので、入力ミスはないと思います。
guest

回答1

0

ベストアンサー

server.local でも MySQL が稼働していませんか?
mysql クライアントの仕様で、"-h localhost" だとローカルのソケットファイルに接続するようです。
mysql -u {server.mysql.mysql_user} -p -h 127.0.0.1 -P 20022 で試してみてください。

また、認証の問題とは別に、ssh のオプション "-L 20022:localhost:3306" だと LISTEN アドレスが 127.0.0.1:20022 となり、mysql.local からしか接続できないので、"-L 0.0.0.0:20022:localhost:3306" とするといいと思います。

投稿2022/03/24 14:49

TaichiYanagiya

総合スコア12146

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

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

mma2001

2022/03/25 04:03

ご教示いただいた方法で、無事やろうとしていたことが実現できました。 mysql クライアントの仕様についてはまったく想定していなかったため教えていただかなければ解決方法にたどり着けませんでした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問