Подключитесь к оракулу в jdbc через туннель SSH - PullRequest
2 голосов
/ 19 августа 2010

В настоящее время мы должны туннелировать через SSH для доступа к нашей базе данных Oracle.Чтобы сделать это, мы должны убедиться, что на сервере выполняется выполнение замазки или эквивалентной программы / скрипта, выполняющего этот туннелирование, прежде чем приложение будет развернуто на Tomcat / Glassfish / и т. Д.Ява обрабатывает это туннелирование прозрачно?Возможно, драйвер jdbc, чем он сам, оборачивает другой диск jdbc, обрабатывающий туннелирование для вас прямо в Java?

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Моим решением было использовать Jsch из JCraft http://www.jcraft.com/jsch/, чтобы открыть туннель при запуске сервера приложений.Я закрываю туннель, когда сервер приложений выключается.Я делаю это через прослушиватель контекста сервлета.

int findUnusedPort() {
        final int startingPort = 1025;
        final int endingPort = 1200;
        for (int port = 1025; port < 1200; port++) {
            ServerSocket serverSocket = null;
            try {
                serverSocket = new ServerSocket(port);
                return port;
            } catch (IOException e) {
                System.out.println("Port " + port + "is currently in use, retrying port " + port + 1);
            } finally {
                // Clean up
                if (serverSocket != null) try {
                    serverSocket.close();
                } catch (IOException e) {
                    throw new RuntimeException("Unable to close socket on port" + port, e);
                }
            }
        }
        throw new RuntimeException("Unable to find open port between " + startingPort + " and " + endingPort);
    }

private Session doSshTunnel(int tunnelPort) {
    // SSH Tunnel
    try {
        final JSch jsch = new JSch();
        sshSession = jsch.getSession("username", "sshhost", 22);
        final Hashtable<String, String> config = new Hashtable<String, String>();
        config.put("StrictHostKeyChecking", "no");
        sshSession.setConfig(config);
        sshSession.setPassword("password");

        sshSession.connect();

        int assigned_port = sshSession.setPortForwardingL(tunnelPort, remoteHost, remotePort);

        return sshSession;
    } catch (Exception e) {
        throw new RuntimeException("Unable to open SSH tunnel", e);
    }
} 
1 голос
/ 19 августа 2010

Некоторое время назад я использовал Apache MINA SSHD для проекта, и я помню, что была поддержка открытия туннелей.

Вы можете проверить http://mina.apache.org/sshd/ для получения дополнительной информации.

В этом вопросе обсуждаются другие варианты: Библиотека SSH для Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...