1

SSH 接続を使用してリモート コンピューターからいくつかのコマンドを実行する必要がありますが、問題は次のとおりです。

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

次の図は、アーキテクチャを表しています (ファイアウォールは 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

3 に答える 3

1

もちろん、 を設定rhost = "localhost"すると、接続は「リソース」サーバーではなく、SSH サーバーに到達します。正しいホスト名を入れれば問題ありません。(私はこれを一度やりました。)

ローカル ポート フォワーディングを実行してからこの転送されたポートに接続する代わりに、JSch から両方の接続を行いたい場合は、 my ProxySSHclassを使用して JSch wiki で検索できます。(私もあなたがそこにいるのと同じような状況でこれをしました。)

于 2012-02-14T23:16:14.953 に答える