Java JSch多隧道/跳线主机
我不确定这是否是由于在端口转发中使用私钥而不是密码造成的,但下面是我试图做的 我需要将本地端口3308一直转发到3306的my SQL DB 我可以在本地计算机上的终端上运行这样的事情Java JSch多隧道/跳线主机,java,ssh,jsch,portforwarding,ssh-tunnel,Java,Ssh,Jsch,Portforwarding,Ssh Tunnel,我不确定这是否是由于在端口转发中使用私钥而不是密码造成的,但下面是我试图做的 我需要将本地端口3308一直转发到3306的my SQL DB 我可以在本地计算机上的终端上运行这样的事情 ssh -L 3308:localhost:3307 username@jumpbox "ssh -L 3307:mysqlDB:3306 username@server" 或者在我的本地计算机上运行第一部分,然后在jumpbox上运行第二部分。两者都可以正常工作,我可以连接到我的本地主机:3308 当我开始
ssh -L 3308:localhost:3307 username@jumpbox "ssh -L 3307:mysqlDB:3306 username@server"
或者在我的本地计算机上运行第一部分,然后在jumpbox上运行第二部分。两者都可以正常工作,我可以连接到我的本地主机:3308
当我开始使用JSch时,问题就出现了。这是我的密码
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);
第一个连接已完成,但第二个连接超时
线程“main”com.jcraft.jsch.JSchException:java.net.ConnectException:操作超时(连接超时)
我在JSch或端口转发方面是否有问题?您的
ssh
命令正在使用在“跳转框”上运行的ssh客户端(另一个ssh
)
当您希望使用Java实现相同的功能时,有两个选项:
session
运行ssh-L 3307:mysqlDB:3306username@server
在“跳转框”上
看
不过,我不认为第二次跳转应该依赖于ssh
program,原因与第一次跳转使用Java/JSch(而不是ssh
program)的原因相同
ssh
工具,而是通过另一个转发端口在本地打开另一个ssh会话。实际上,您可以使用最新版本的ssh
,使用(从OpenSSH 7.3开始支持)执行相同的操作:
ssh-l3308:mysqlDB:3306-Jusername@jumpbox username@server
另见
我更喜欢这种方法
要实施后一种方法:
- 您必须将一些本地端口转发到
,以便打开到服务器:22
服务器的SSH连接:
JSch jsch = new JSch(); jsch.addIdentity("~/.ssh/id_rsa"); Session jumpboxSession = jsch.getSession("username", "jumpbox"); jumpboxSession.connect(); int serverSshPort = jumpboxSession.setPortForwardingL(0, "server", 22); Session serverSession = jsch.getSession("username", "localhost", serverSshPort); serverSession.connect();
- 然后通过
将另一个本地端口转发到MySQL端口:server
现在,您应该能够使用MySQL客户端连接到int mysqlPort = serverSession.setPortForwardingL(0, "mysqlDB", 3306);
localhost:mysqlPort
强制性警告:不要使用
StrictHostKeyChecking=no
盲目接受所有主机密钥。这是一个安全缺陷。你失去了一种保护
有关正确(安全)的方法,请参阅: