質問
私は現在、すべての着信接続を拒否するファイアウォールの背後にあるサーバーにSSHをSSHする方法を説明しようとしています。サーバーはsshを出すことができるので、ファイアウォールの後ろにサーバーを取得してワークステーションにSSHトンネルを作成する方法があるかどうか疑問に思っています。
トンネル /逆トンネリングを調べましたが、これらはポート転送ソリューションのように見えます。これは、ファイアウォールがすべてのポートのすべての接続を拒否しても機能しません。
理想的には、これをRuby(Net :: SSH Gemを使用して)で行いたいと思います。
Net::SSH.start('host', 'user', :password => "password")
どういうわけか既存のトンネルにバインドすることができました。
ありがとう!
解決
これは、サーバーを制御する場合はかなり簡単です。コマンドラインバージョンを提供します。それを好きなフレームワークに取り入れることができます。
server$ ssh -R 9091:localhost:22 client.example.egg
client$ ssh -p 9091 localhost
サーバーは、最初にクライアントへの接続を確立します。クライアントは、ポート9091の「R」エモートエンド(つまりクライアント)でリスニングを開始し、それらの接続をに転送します。 localhost:22
, 、つまり、それ自体のSSHサーバーに。
クライアントは、サーバーのSSHサーバーに透過的に転送される独自のローカルポート9091に接続する必要があります。
これは通常、クライアントのSSHクライアントがそれを知らないため、通常の公開キーのチェック(およびアドヘントセキュリティ!)に大混乱をもたらします。 localhost:9091
と同じです server:22
. 。クライアントがパテの場合、資格情報を適切に調べることができるように、「実際の」サーバー名をどこかに提供するオプションがあります。
他のヒント
最初に接続しようとしているホストからトンネルを作成(および維持する)ことができない限り(次にそのトンネルを介して接続することができます)、できません。それがファイアウォールのポイントです。ネットワークへの不正アクセスを防ぎます。
ただし、ファイアウォールはトンネルをブロックしてはなりませんが、トンネルの管理方法は正確に異なります。使用してセットアップされたポートフォードトンネル SSHのトンネル機能 ファイアウォールを覆します。ただし、リモートネットワークの管理者とのトラブルにもかかる場合があります。
そのため、最終的には、トンネルを必要とせずにファイアウォールルールをリラックスさせるために、または少なくともトンネルを許可するために、ネットワーク管理者と話をする必要があります。