java - 使用Java通过SSH隧道传输文件

标签 java ssh jsch ssh-tunnel proxytunnel

我需要使用 SSH/SFTP 连接从远程计算机获取一些文件,但问题如下:

我将在其中运行应用程序的客户端计算机(运行 Windows)连接到网络,在该网络中我可以看到远程服务器(第二台计算机,运行 Unix,位于同一网络中)。我可以与它进行 SSH 连接,但是包含文件(运行 Unix)的计算机不在该网络中,我只能通过在第二台计算机中打开的动态隧道 SSH 与其连接,我通常在其中使用 PuTTY 进行配置通过此连接,我就可以访问远程文件。

下图表示架构,(防火墙就像第二台机器)

Architecture

我需要自动完成这项工作,因此我使用 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。

最佳答案

your other question 的答案相同(您使用 shell 连接而不是文件传输):

将正确的主机名设置为rhost,即从防火墙服务器看到的目标服务器的名称。

如果它与 HTTP 一起工作,我想防火墙服务器也有一个正在运行的 HTTP 代理,它将端口 80 上的请求转发到您的目标端口......当然,如果它也应该这样做,它就不能为 SSH 执行此操作本身就是一个 SSH 服务器。

如果您想从 JSch 进行这两个连接,而不是进行本地端口转发然后连接到此转发的端口,您可以使用我的 ProxySSH 类来查找 in the JSch wiki .

关于java - 使用Java通过SSH隧道传输文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272079/

相关文章:

java - 签名长度不正确 : got 127 but was expecting 128

java - 通过java ssh,将错误存储在变量中

java - 如何在Servlet-Applet场景中进行单元测试

java - 瀑布图 - 条形图之间的空间

windows - 使用Xming的X over SSH-Qt Qml应用程序

bash - 没有通过SSH从bash -c输出

sftp - 带有session.setConfig的JSch SFTP安全性(“StrictHostKeyChecking”, “no”);

java - 在 GUI 组件上使用可重用操作的最佳实践

java - 严重 [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal

node.js - Node SSH2 sudo 密码