私は現在、すべての着信接続を拒否するファイアウォールの背後にあるサーバーに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(私が作成したもの)の「リモートエンド」(つまりクライアント)でリッスンを開始し、それらの接続をlocalhost:22
、つまりsshに転送します。それ自体のサーバー。
次に、クライアントは、サーバーのsshサーバーに透過的に転送される独自のローカルポート9091に接続する必要があります。
クライアントのsshクライアントはlocalhost:9091
がserver:22
と同じであることを知らないため、これは通常、公開鍵チェック(および準拠セキュリティ!)に大混乱をもたらします。クライアントがPuTTYの場合、資格情報を適切に検索できるように、どこかに「実際の」サーバー名を指定するオプションがあります。
最初に接続しようとしているホストからトンネルを作成(および維持)できない限り(これにより、そのトンネルを介して接続できるようになります)、できません。それがファイアウォールのポイントです。ネットワークへの不正アクセスを防止します。
ただし、ファイアウォールはトンネルの管理方法に正確に依存しますが、トンネルをブロックするべきではありません。 sshのトンネリング機能 を使用して設定されたポート転送トンネルは、ファイアウォールを破壊します。ただし、リモートネットワークの管理者に問題が発生する可能性もあります。
したがって、最終的には、ネットワーク管理者に相談して、ファイアウォールルールを緩和して、トンネリングを必要とせずに実行するか、少なくともトンネルを使用するための承認を取得する必要があります。