Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSch多隧道/跳线主机_Java_Ssh_Jsch_Portforwarding_Ssh Tunnel - Fatal编程技术网

Java JSch多隧道/跳线主机

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 当我开始

我不确定这是否是由于在端口转发中使用私钥而不是密码造成的,但下面是我试图做的

我需要将本地端口3308一直转发到3306的my SQL DB

我可以在本地计算机上的终端上运行这样的事情

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实现相同的功能时,有两个选项:

  • 在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();
      
    • 然后通过
      server
      将另一个本地端口转发到MySQL端口:

      int mysqlPort = serverSession.setPortForwardingL(0, "mysqlDB", 3306);
      
      现在,您应该能够使用MySQL客户端连接到
      localhost:mysqlPort


    强制性警告:不要使用
    StrictHostKeyChecking=no
    盲目接受所有主机密钥。这是一个安全缺陷。你失去了一种保护

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