0

SSH トンネル経由で mysql にアクセスしようとすると、次のエラーが発生します。

ERROR 2005 (HY000): Unknown MySQL server host '[serverhost]' (0)

ただし、MySQL Workbench または通常の SSH CLI を介して試行すると、正常に動作します。私は何を間違っていますか?(このサイトで複数の関連するスレッドをスキャンしましたが、この動作を説明するスレッドはありませんでした。)

TMI:

私が持っているホストは名前であり、IP ではありません。

次のようにトンネルを開きます。

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:localhost:[remote-mysql-port]

したがって、コマンドラインで(トンネルを介して)mysqlを呼び出します。

mysql -h [serverhost] -u [user] -p[pw] --port [local-listen-port]

したがって、SSHコマンドライン(トンネルなし)でmysqlを呼び出します。

mysql -h [serverhost] -u [user] -p[pw] --port [remote-mysql-port]
4

1 に答える 1

2

既存の plink コマンドは、宛先アドレスとして localhost を指定しているため、間違っています (これは、SSH セッションの反対側のローカルホストであるため、[remote-ip]、あなたの計算では、エラーが発生している理由です) - [サーバーホスト] である必要があります。

次に、誤ってmysql を [serverhost] に直接接続しようとしていますが、トンネルはルーティングに影響しないため、これは正しくありません。localhost に接続する必要があります。

おそらく[serverhost]にアクセスできる[remote-ip]から接続しているため、[remote-ip]でsshシェルセッションに接続すると、既存のサンプルコマンドが機能します。

[serverhost] がリモート サーバーであると仮定すると、コマンドは次のようになります。

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:[serverhost]:[remote-mysql-port]

それで

mysql -h localhost -u [user] -p[pw] --port [local-listen-port]

編集: 明らかにトンネルの性質を誤解しているので、図にしてみます。

SSH接続

localhost[?] <--------> リモート IP[22]

トンネル

localhost[ローカル ポート] <---- SSH ---> リモート IP[22] <--- TCP ---> サーバーホスト[リモート ポート]

したがって、SSH/plink は、指定した [local-port] 番号を使用して localhost のポートをバインドし、接続要求を受信すると、[remote-ip] から [serverhost:remote-port] への接続を確立します。次に、[localhost] から [remote-ip] へのホップに独自の SSH 接続を使用して、それらの間で送受信をシャッフルします。

したがって、トンネルが設定されたら、[serverhost:remote-port] にアクセスするには、実際にツールを [localhost:local-port] に向けると、トンネルはトラフィックを適切な場所にルーティングします。

于 2012-02-15T00:18:20.153 に答える