我需要使用 SSH/SFTP 连接从远程计算机获取一些文件,但问题如下:
我将在其中运行应用程序的客户端计算机(运行 Windows)连接到一个网络,在该网络上我可以看到远程服务器(第二台计算机,运行 Unix,在同一网络中)。我可以用它进行 SSH 连接,但是包含文件(运行 Unix)的计算机不在这个网络中,我只能通过在第二台计算机上打开的动态隧道 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);
我得到了连接,但是当我使用 object 运行命令时session
,答案来自第二台机器,而不是我预期的第三台机器,我想知道是否有另一个库可以帮助完成这项工作,或者我是使用错误的 JSch。