0

システムAに直接アクセスしないようにしたいのですが、システムAでサービスCが実行されています。

誰でもアクセスできる他のシステムBがあります。

サービスCがBで実行されているとユーザーが考えることができるように、BからAにリクエストを「転送」したいと思います。

技術的には、この要件を達成するために2つのネットワークプログラム(DとE)を実装する方法を知っています。DはシステムAで実行されており、システムBで実行されているEに接続しています。

サービスCに対するBへの要求はすべてEからDに転送されます。Dは要求を「実際の」サービスCに渡しました。もちろん、応答は逆の順序で行われました。

Network Access Anyone -> B <- A
Programs  E <- D 

Service flow Anyone -> E -> D -> C 

まだ私と一緒にいる人のために:

そのようなプログラムを行うとき、私は車輪の再発明をしますか?

言い換えれば、この機能を実行しているオープンソース/ Linuxプログラムはすでにありますか?

4

1 に答える 1

2

これは、SSHトンネリングの教科書のユースケースのように見えます。

サーバーAに、SSHサーバーをインストールします(たとえば、Debianの場合はパッケージopenssh-serverをインストールします)。サーバーBで、次のコマンドを実行します。

ssh -f SERVICEUSER@AHOST -L BPORT:AHOST:APORT -N

ここで、SERVICEUSERはサービスを実行するユーザーの名前、AはAのホスト名またはIP、BPORTはサーバーBでサービスを利用できるポートの番号、APORTはサービスが存在するポートです。サーバーAでリッスンしています。詳細については、http://www.revsys.com/writings/quicktips/ssh-tunnel.htmlを参照してください。

再起動するたびにこのコマンドを実行する必要があるため、サービスのように管理できるように、このコマンドのinitスクリプトを作成することをお勧めします。ここから始めてください:http ://www.thegeekstuff.com/2012/03/lsbinit-script/

initスクリプトでは不可能なSERVICEUSERのパスワードを入力する必要がないようにするには、サーバーBで秘密SSHキーを生成し、それをSERVICEUSERのauthorized_keysファイルに追加する必要があります。これにはSERVICEUSERのホームディレクトリの作成が含まれる場合があります。usermod -d次のコマンドを使用して実行します。http: //linux.die.net/man/8/usermod次に、http ://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.htmlをフォローします。よくある落とし穴の1つ覚えておくべきことは、authorized_keysファイルと.sshディレクトリの両方chmodを600に編集し、SERVICEUSERが所有する必要があるということです。そうしないと、SSHサーバーはそれらを無視します。

于 2013-02-10T22:09:33.933 に答える