こんにちは、プロジェクト用の企業データセンターにサーバーがある状況です。ポート22でこのマシンにSSHアクセスできます。このサーバーで実行されている仮想マシンがいくつかあり、他の多くのオペレーティングシステムが動作しているすべての仮想マシンの背後にあります。現在、私はデータセンターのファイアウォールの背後にいるので、上司から、インターネット上の多くの人にこれらの仮想マシンへの直接アクセスを許可するために何かできるかどうか尋ねられました。 22以外のポートでトラフィックを取得することが許可されていれば、ポート転送を実行できます。しかし、私はこれを許可されていないので、この場合の解決策は何ですか?接続したい人は完全な馬鹿かもしれませんが、自分のマシンでPuTTYを開いただけで幸せになる人もいれば、filezillaかもしれません。 SSHで何ができるか明確ではないので、この状況でSSHに対して同様の作業を実行できるApacheリバースプロキシに相当するものがあります。
私はファイアウォールを手に持っていないか、22以外のポートを開いていません。実際には、ファイアウォールが開くことを許可しないように要求した場合でも、2倍のSSHは私のスーパーバイザーが望んでいないものです。
コンピューターからデータセンターのサーバーへのsshトンネルを開く必要があります。これに「server1」という名前を付けます。 opensshを使用している場合は、単に実行できます
ssh -L0.0.0.0:8080:localhost:8080 you_username@server1
これにより、ポート8080のコンピューターからサーバー、ポート8080への接続が開かれ、その間のファイアウォールがスキップされます。 Apacheがポート8080でリッスンしていると仮定します。ポート転送形式はIP:ローカルポート:リモートアドレス:リモートポートでリッスンしています。もちろん単一サーバーの場合も使用できます
ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1
-Lパラメータのlocalhostはserver1に関連していることに注意してください。つまり、サーバーはlocalhostからの接続を確認していますが、実際にはssh接続を介してコンピューターから接続が行われています。
パラメータも必要です
AllowTcpForwarding yes
サーバーのssh構成(通常は/ etc/ssh/sshd_config)。
この後、他のユーザーはポート8080でコンピューターに接続し、Apacheリバースプロキシ経由で接続を取得できます。一般的なプロキシが必要な場合(Apache構成で特定のアドレスだけでなく、ユーザーがアドレスを選択できるようにするため)、server1にsquidをインストールし、sshトンネルを使用してsquidポートに接続する必要があります。
SshMeIn のようなものを使用できるかもしれません。これはファイアウォールを介してSSHトンネルを作成するオープンソースのWebシステムであり、ポートを開く必要すらありません。