リバース SSH は、外部から (ファイアウォールの背後にある) システムにアクセスするために使用できる手法です。
ご存じのとおり、SSH はネットワーク ノード間の暗号通信をサポートするネットワーク プロトコルです。このプロトコルを使用すると、安全なリモート ログイン、リモート マシンとの間の安全なコピーなどを行うことができます。
通常、ssh コマンドを使用してリモート サーバーに安全に接続するには、次の手順を実行します。
$ ssh [your-account-login]@[server-ip]
リバース SSH とは
SSH は、リモート マシンまたはサーバーに安全にアクセスするための非常に優れたツールです。ただし、ファイアウォールの背後にあるリモートサーバーに接続しようとすると、このファイアウォールが着信接続または送信要求のないデータ転送要求を拒否すると、問題が発生します。これは、リモート サーバー マシンによって開始された接続のみが許可されることを意味します。これは、このサーバー マシンにリモートでアクセスしたい人にとっては深刻な問題です。
リバース SSH は、このリモート サーバー マシンへの通常の SSH をシミュレートできる手法を提供します。
主な問題は、マシンがリモート サーバー マシンとの間で確立しようとしている ssh 接続をファイアウォールが拒否していることです。しかし、同じファイアウォールがサーバー マシンからの接続に問題がないことはわかっています。ですから、ファイアウォールの内側に座っている誰かに、サーバーにリモート アクセスするという目標を達成できる何かをしてもらうように頼んでみてはいかがでしょうか。これを行うには、ssh -R オプションを使用する必要があります。
これは、man ページの ssh -R オプションの説明です:
<ブロック引用>-R [bind_address:]ポート:ホスト:ホストポート
リモート (サーバー) ホスト上の特定のポートが、ローカル側の特定のホストおよびポートに転送されるように指定します。これは、リモート側のポートをリッスンするソケットを割り当てることで機能し、このポートへの接続が確立されるたびに、接続はセキュア チャネルを介して転送され、ローカル マシンからホスト ポート hostport への接続が確立されます。
したがって、-R オプションを指定して ssh コマンドを (この場合はサーバーから) 使用してマシンに接続し、そこにポートを割り当て、そのポートでの接続要求がリモート サーバーの ssh ポートに転送されるようにします。 /P>
マシンが ssh を実行する代わりに、サーバー マシンが ssh を実行し、ポート フォワーディングを通じて、サーバー マシンに ssh で戻ることができるようにします。
リバース SSH トンネルを作成する方法
リモート サーバー側に座っている友人がサーバー上で実行する必要があるコマンドは次のとおりです:
ssh -fN -R 7000:localhost:22 username@yourMachine-ipaddress
したがって、リモート サーバーからマシンへのこの ssh 接続要求は、マシンのポート 7000 に対するすべての ssh 接続要求がリモート サーバーのポート 22 に転送されることを確認します。
ここで、自分のマシンからポート 7000 で自分のマシンへの ssh 接続要求を行います。
ssh username@localhost -p 7000
ここでは、localhost で ssh を実行しているように見えるかもしれませんが、リクエストはリモート ホストに転送されます。そのため、リモート サーバーでアカウント「ユーザー名」を使用し、パスワードの入力を求められたら、対応するパスワードを入力する必要があります。
これにより、リバース ssh 手法に関連するほとんどの側面がクリアされるはずです。しかし、1 つ問題があります。問題は、最初に ssh 接続を作成するために、ファイアウォールの後ろに座っている友人に依頼する必要があることです。これは毎回実行できるわけではありません。
この問題を克服するためにできることは、(自分のマシンと同じように) ファイアウォールの外にあるマシンを、常にオンになるようにセットアップすることです。このマシンを machine_z と呼びましょう。
machine_z の利点は、一度このリバース ssh をセットアップして、そのままにしておくことができることです。リモート マシンにログインする必要があるときはいつでも、指定したポートで machine_z に ssh できます (前に示したように)。接続要求はリモート サーバー マシンに転送され、ほら、リモートでコマンドを実行します。サーバ。
関連する注意事項として、パスワードを入力せずに別のサーバーに接続するために、パスワードなしの SSH をセットアップすることもできます。
machine_z で構成する必要があるいくつかの設定には、以下が含まれます。
- パラメータ TCPKeepAlive、ClientAliveInterval、ClientAliveCountMax、および GatewayPorts が適切な値に設定されていることを確認してください。これらのパラメータは /etc/sshd_config または /etc/ssh/sshd_config ファイルにあります
- 上記のパラメータを変更した場合は、変更を反映するために sshd デーモンを再起動する必要があります。
- また、この ssh セッションがユーザーのログアウト時に発生するハングアップの影響を受けないように、nohup コマンドを使用して最初の ssh コマンド (リモート サーバーから machine_z に対して実行されるコマンド) を実行するようにしてください。