マイスクリプトを実行しているローカルコンピュータは、リモートサーバー上のデータベースにアクセスする必要があります。先週、ローカルコンピュータで次のことができました
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コマンドを入力するマシンは次のとおりです。「あなたの所有者」。
紹介する
ローカル:
-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
し、すべての接続試行を転送します。地元のsourcePort
onPort
ポートにアクセスできるforwardToHost
名前のコンピュータポートに接続します。connectToHost
孤立:
-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
し、すべての接続試行を転送します。離れてsourcePort
onPort
forwardToHost
ローカルコンピュータからアクセスできるコンピュータのポートに接続します。
その他のオプション
-f
トンネルをアクティブに保つためにリモートサーバーで何かを実行する必要がないように、認証後にsshにバックグラウンド自体を指示します。-N
SSH接続が必要ですが、実際にはリモートコマンドを実行したくないことを示します。作成中のものがトンネルのみの場合、このオプションを含めることでリソースを節約できます。-T
対話型シェルを作成したくないので、適切なpseudo-tty割り当てを無効にします。
あなたの模範
最初の写真はあなたの状況を示しています。そうすれば
ssh -L 1081:localhost:3306 remotehost
緑色ポートへのすべての接続試行は、1081
SSHトンネルを介してリモート3306
ホストのローカルホスト、つまりリモートホスト自体のピンクポートに転送されます。
今、あなたのPHPスクリプトは渡すことができますが、localhost:1081
あなたnetstat
のコマンドはremotehost
1081を受け取るものを見つけることができません(少なくともトンネルの結果ではありません)。ピンクのポートは、SSHによって生成されたリスニングポートではなく転送先であるためです。そしてポートに1081
渡す代わりに3306
。
データベースサーバーは実際にポートでリッスンしていますか3306
、それともできますか1081
?後者がtrueの場合、コマンドは次のように変更する必要があります。
ssh -L 1081:localhost:1081 remotehost
データベースがポートでリッスンしている場合は、1081
netstat(sshとは無関係)を使用してそのポートを見つける必要があります。
答え2
リモート側がポート1081でリッスンするとは予想されません。 mysqlのデフォルトポートであるリモート側ポート3306にトンネリングを要求しています。そのポートで実際にリッスンしていることを確認することをお勧めします。または両側でポート1081を使用するには、-L
オプションを-L1081:localhost:1081
。