首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSch多隧道/跳线

JSch多隧道/跳线
EN

Stack Overflow用户
提问于 2018-11-30 21:13:34
回答 1查看 2.3K关注 0票数 6

我不确定这是否是由于使用私钥而不是密码进行端口转发造成的,但下面是我要做的事情

我需要在3306将本地端口3308转发到my。

我可以在我本地人的终点站里一起经营这样的事情。

代码语言:javascript
复制
ssh -L 3308:localhost:3307 username@jumpbox "ssh -L 3307:mysqlDB:3306 username@server"

或者在我的本地运行第一部分,然后在跳跃箱上运行第二部分。两者都很好,我可以连接到本地主机:3308。

当我开始使用JSch时,问题就出现了。这是我的密码

代码语言:javascript
复制
JSch jsch = new JSch();
jsch.addIdentity("~/.ssh/id_rsa");

Session session = jsch.getSession("username", "jumpbox");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();

int assinged_port = session.setPortForwardingL(3308, "localhost", 3307);
Session mysqlSession = jsch.getSession("username", "server", assinged_port);
mysqlSession.setConfig("StrictHostKeyChecking", "no");
mysqlSession.connect(); // Connection timed out here
mysqlSession.setPortForwardingL(3307, "mysqlDB", 3306);

第一个连接已经完成,但是第二个连接超时了。

线程“主”com.jcraft.jsch.JSchException中的异常: java.net.ConnectException:操作超时(连接超时)

我在JSch或端口转发方面做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-01 07:46:33

您的ssh命令正在使用运行在“跳转框”上的SSH客户端(另一个ssh)。

当您想使用Java实现相同的功能时,您有两个选项:

  1. 在Java中也这样做,即使用session在“跳转框”上运行ssh -L 3307:mysqlDB:3306 username@server。 见使用JSch执行命令。 不过,我认为第二次跳转不应该依赖ssh程序,同样的原因是,第一次跳转使用的是Java/JSch (而不是ssh程序)。
  2. 避免使用单独的ssh工具,而是通过另一个转发端口在本地打开另一个SSH会话。实际上,您可以使用ssh的最新版本使用(跳跃)开关 (自OpenSSH 7.3以来支持)执行相同的操作: ssh -L 3308:mysqlDB:3306 -J用户名@jumpbox用户名@server 另见OpenSSH支持多跳登录吗? 我更喜欢这种方法。

为实施后一种办法:

  • 您必须将一些本地端口转发到server:22,以便您可以打开到server的SSH连接: JSch jsch =新JSch();jsch.addIdentity(“~/..ssh/id_rsa”);会话jumpboxSession =jsch.getSession(“用户名”,"jumpbox");jumpboxSession.connect();int serverSshPort = jumpboxSession.setPortForwardingL(0,"server",22);会话serverSession =jsch.getSession(“用户名”,"localhost",serverSshPort);serverSession.connect();
  • 然后通过server将另一个本地端口转发到MySQL端口: int mysqlPort = serverSession.setPortForwardingL(0,"mysqlDB",3306); 现在,您应该能够使用localhost:mysqlPort客户端连接到MySQL。

强制性警告:不要使用StrictHostKeyChecking=no盲目地接受所有主机密钥。这是一个安全漏洞。你失去了对https://en.wikipedia.org/wiki/Man-in-the-middle_attack的保护。

有关正确(安全)的方法,请参见:

https://stackoverflow.com/q/32852906/850848

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53564992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档