2

SSH/SFTP 接続を使用してリモート コンピューターからいくつかのファイルを取得する必要がありますが、問題は次のとおりです。

アプリケーションを実行するクライアント コンピューター (Windows を実行) は、リモート サーバー (同じネットワーク内で Unix を実行している 2 台目のコンピューター) を確認できるネットワークに接続されています。私はそれでSSH接続を行うことができますが、ファイルを含むコンピューター(Unixを実行している)はこのネットワークにありません.2番目のコンピューターで開いている動的トンネルSSHを介してのみ、これに接続できます。通常、構成にはPuTTYを使用しますこの接続があれば、リモート ファイルにアクセスできます。

次の図はアーキテクチャを表しています (ファイアウォールは 2 台目のマシンのようなものです)。

建築

これを自動的に機能させる必要があるため、Java と JSch ライブラリでいくつかのテストを行いました。コードは次のとおりです。

/* Direccion y puerto del host local */
String host = "localhost";
int lport = 5040;

/* Direccion y puerto del host remoto*/
String rhost = "localhost";
int rport = 80;

/* Usuario y password para conectarse al servidor ssh*/
String user = "test";
String pwd = "test";

JSch jsch=new JSch();

Session session=jsch.getSession(user, host, 22);
session.setPassword("test");

Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);
session.connect();

int assinged_port=session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);

接続できましたが、 object を使用してコマンドを実行すると、session予想どおり 3 番目のマシンからではなく 2 番目のマシンからの答えが返されました。これを機能させるのに役立つ別のライブラリがあるか、または私が間違った JSch を使用しています。

4

2 に答える 2

0

他の質問(ファイル転送の代わりにシェル接続を使用している場合)と同じ答えです。

正しい hostName を として入力しrhostます。つまり、ファイアウォール サーバーから見たターゲット サーバーの名前です。

HTTPで動作する場合、ファイアウォールサーバーには、ポート80でリクエストをターゲットポートに転送するHTTPプロキシも実行されていると思います...そしてもちろん、SSHでもある必要がある場合、SSHでこれを行うことはできませんサーバー自体。

ローカル ポート フォワーディングを実行してからこの転送されたポートに接続する代わりに、JSch から両方の接続を行いたい場合は、 my ProxySSHclassを使用して JSch wiki で検索できます。

于 2012-02-14T23:21:31.613 に答える