Exemple #1
0
  private Connection getMySQLSSHConnection() {
    Connection connection = null;

    //
    int assigned_port;
    final int local_port = 3309;

    // Remote host and port
    final int remote_port = 3306;
    final String remote_host = "remote.host.com";

    try {
      JSch jsch = new JSch();

      // Create SSH session.  Port 22 is your SSH port which
      // is open in your firewall setup.
      System.out.println("DEBUG: get session");
      Session session = jsch.getSession("user", remote_host, 22);
      System.out.println("DEBUG: set password");
      session.setPassword("password");

      // Additional SSH options.  See your ssh_config manual for
      // more options.  Set options according to your requirements.
      java.util.Properties config = new java.util.Properties();
      config.put("StrictHostKeyChecking", "no");
      config.put("Compression", "yes");
      config.put("ConnectionAttempts", "2");

      System.out.println("DEBUG: set configuration");
      session.setConfig(config);

      // Connect
      System.out.println("DEBUG: SSH connect");
      session.connect();

      // Create the tunnel through port forwarding.
      // This is basically instructing jsch session to send
      // data received from local_port in the local machine to
      // remote_port of the remote_host
      // assigned_port is the port assigned by jsch for use,
      // it may not always be the same as
      // local_port.

      System.out.println("DEBUG: get assigned port");
      assigned_port = session.setPortForwardingL(local_port, remote_host, remote_port);

    } catch (JSchException e) {
      System.out.println("DEBUG: SSH exception: fail");
      e.printStackTrace();
      return null;
    }

    if (assigned_port == 0) {
      System.out.println("Port forwarding failed !");
      return null;
    }

    // Database access credintials.  Make sure this user has
    // "connect" access to this database;

    // these may be initialized somewhere else in your code.
    final String database_user = "******";
    final String database_password = "******";
    final String database = "db_name";

    // Build the  database connection URL.
    StringBuilder url = new StringBuilder("jdbc:mysql://localhost:");

    // use assigned_port to establish database connection
    url.append(assigned_port)
        .append("/")
        .append(database)
        .append("?user="******"&password="******"DEBUG: load mysql driver");
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      System.out.println("DEBUG: get connection");
      connection = DriverManager.getConnection(url.toString());
    } catch (Exception e) {
      System.out.println("DEBUG get connection failed");
      e.printStackTrace();
    }

    return connection;
  }