我需要使用SSH连接从远程计算机运行一些命令,但是问题如下:

客户端计算机(运行Windows)已连接到网络,在该网络中我可以看到服务器远程服务器(同一网络中的第二台* nix计算机)。我可以使用它进行SSH连接,但是包含文件(正在运行* nix)的计算机不在此网络中,我只能通过第二个计算机中打开的动态SSH隧道与该槽连接,我通常在该计算机上使用PuTTY配置此连接。然后,我就可以访问远程文件了。

下图显示了体系结构(防火墙就像第二台计算机一样):



我需要自动进行这项工作,因此我已经使用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);


我建立了连接,但是当我使用对象session运行命令时,答案是来自第二台计算机,而不是我期望的第三台计算机。我想知道是否有另一个库可以帮助完成这项工作,或者我使用的JSch错误。

最佳答案

当然,如果设置rhost = "localhost",则连接将到达SSH服务器,而不是“资源”服务器。
输入正确的主机名,应该没有问题。 (我做过一次。)

如果要通过JSch进行这两个连接,而不是先进行本地端口转发然后再连接到此转发的端口,则可以使用我的ProxySSH类来查找in the JSch wiki。 (我也曾在类似的情况下这样做过。)

10-07 19:16
查看更多