SSH -L トンネルは動作しなくなりました。

SSH -L トンネルは動作しなくなりました。

マイスクリプトを実行しているローカルコンピュータは、リモートサーバー上のデータベースにアクセスする必要があります。先週、ローカルコンピュータで次のことができました ssh -f -N -T -L1081:localhost:3306 ueser@remoteserver -p2222

# netstat -an | egrep "tcp.*:1081.*"
tcp        0      0 127.0.0.1:1081          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:1081                :::*                    LISTEN

その後、スクリプトにmysql接続にポート1081を使用するように指示し、成功しました。この netstat コマンドはローカルで接続を受け入れることを示していますが、リモートシステムで同じチェックを実行すると、実際のmysqlサーバーは1081をまったく受信しません。以前はそうではありませんでした。

sshd_configを確認した結果、トンネリングが許可されているようです。つまり、設定変更はありません。また、ネットワーク上の他のサーバーへのトンネルを開こうとしましたが、うまくいきませんでした。私の命令はゴミですか?様々な組み合わせを試しました -f -T

答え1

私はいくつかのスケッチを作りました。

SSH Tunnelコマンドを入力するマシンは次のとおりです。「あなたの所有者」

ローカルで始まるSSHトンネル


リモートから始まるSSHトンネル

紹介する

  1. ローカル:-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHost意味:SSHを使用して接続connectToHostし、すべての接続試行を転送します。地元の sourcePortonPortポートにアクセスできるforwardToHost名前のコンピュータポートに接続します。connectToHost

  2. 孤立:-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHost意味:SSHを使用して接続connectToHostし、すべての接続試行を転送します。離れて sourcePortonPortforwardToHostローカルコンピュータからアクセスできるコンピュータのポートに接続します。

その他のオプション

  • -fトンネルをアクティブに保つためにリモートサーバーで何かを実行する必要がないように、認証後にsshにバックグラウンド自体を指示します。
  • -NSSH接続が必要ですが、実際にはリモートコマンドを実行したくないことを示します。作成中のものがトンネルのみの場合、このオプションを含めることでリソースを節約できます。
  • -T対話型シェルを作成したくないので、適切なpseudo-tty割り当てを無効にします。

あなたの模範

最初の写真はあなたの状況を示しています。そうすれば

ssh -L 1081:localhost:3306 remotehost

緑色ポートへのすべての接続試行は、1081SSHトンネルを介してリモート3306ホストのローカルホスト、つまりリモートホスト自体のピンクポートに転送されます。

今、あなたのPHPスクリプトは渡すことができますが、localhost:1081あなたnetstatのコマンドはremotehost1081を受け取るものを見つけることができません(少なくともトンネルの結果ではありません)。ピンクのポートは、SSHによって生成されたリスニングポートではなく転送先であるためです。そしてポートに1081渡す代わりに3306

データベースサーバーは実際にポートでリッスンしていますか3306、それともできますか1081?後者がtrueの場合、コマンドは次のように変更する必要があります。

ssh -L 1081:localhost:1081 remotehost

データベースがポートでリッスンしている場合は、1081netstat(sshとは無関係)を使用してそのポートを見つける必要があります。

答え2

リモート側がポート1081でリッスンするとは予想されません。 mysqlのデフォルトポートであるリモート側ポート3306にトンネリングを要求しています。そのポートで実際にリッスンしていることを確認することをお勧めします。または両側でポート1081を使用するには、-Lオプションを-L1081:localhost:1081

関連情報