Java + SSH + Postgres

Мы реализуем университетский проект: сервис по объединению автомобилей на Java.

Нам нужно решить проблему, связанную с «как управлять сервером postgres»: база данных PostgreSQL сконфигурирована на лабораторном сервере под названием «golem» (130.136.4.sth) доступен только через терминалы в той же подсети (130.136.4.0). У нас есть четыре (наша) учетная запись, через которую мы можем установить ssh-соединение с хостом.

Можно ли сделать SQL-запросы через SSH к Postgres DB в JAVA?

Спасибо :) Davide

 Davide12 июн. 2012 г., 21:45
@ Брендан: Извините, но мы еще ничего не пробовали, потому что мы не являемся экспертами в Java. Поэтому мы искали подсказки у вас, эксперты :) Может быть, проверен шаблон дизайна, а не плохие решения, найденные другими.
 Brendan12 июн. 2012 г., 20:28
Что вы пробовали? .... серьезно ... Я привязан к чтению открытых вопросов ...
 Valentin Vrinceanu12 июн. 2012 г., 20:27
Взгляните на это. Это не полный ответ, но я думаю, что это часть его, по крайней мере, SSH-соединения:example-code.com/java/ssh_exec.asp

Ответы на вопрос(3)

ssh & quot; сопровождаемый любой командой, эта команда выполняется на удаленном хосте. Таким образом, вы должны иметь возможность запускать предварительно запеченные запросы в пакетном режиме через ssh.

Рассмотрите возможность генерации ключей и обмена ключами, чтобы включить ssh без пароля.

Пример (это просто выводит список каталогов на ваш терминал):

ssh [email protected] ls
Решение Вопроса

вы можете использовать ssh port forwarding для доступа к базе данных, как если бы она была установлена локально. То, как включена переадресация портов, зависит от используемого вами клиентского программного обеспечения, например, в openssh есть переключатель командной строки (-L):

ssh [email protected] -L localport:remotehost:remoteport

Эта команда сделаетremoteport наremotehostхотя доступно только черезhost, доступен наlocalport на твоем компьютере.

 13 июн. 2012 г., 02:57
Нет также никакой реальной причины использовать этот подход только для разработки. Добавить опцию для вашего Java-приложения для запуска сеанса SSH для туннелирования трафика легко. Переадресация порта ssh очень надежна, хотя производительность при перегруженности может быть ненадежнойbecause tunneling TCP within TCP confuses TCP's congestion control and rate algorithms(http://sites.inka.de/bigred/devel/tcp-tcp.html). If you don't want to spawn a process, [JSch поддерживает переадресацию портов и IP-туннелирование через нативный Java ssh.
 13 июн. 2012 г., 02:52
Вы также можете указать ssh прослушивать 0.0.0.0:localport вместо 127.0.0.1:localport по умолчанию, передав-g опция (см. справочную страницу). Вы НЕ должны делать это, если вам это действительно не нужно, но если вам это нужно, оно есть. Это раскрывает & quot; remotehost: remoteport & quot; через & quot; & lt; yourhost & gt;: localport & quot; вEVERYONE кто может связаться с & lt; yourhost & gt; yourport & quot; поэтому убедитесь, что & quot; remotehost: remoteport & quot; имеет строгую безопасность и / или использует iptables на хосте пересылки для ограничения доступа к порту.

так как они кажутся более легкими для выполнения того, что вам нужно.

Однако, если вам действительно нужно реализовать отправку команд с Java для лабораторного задания, вы можете взглянуть на библиотеку JSch (Java Secure Channel), найденную здесь:http://www.jcraft.com/jsch/ Примеры здесьhttp://www.jcraft.com/jsch/examples/

С его помощью вы можете отправлять команды ssh и выполнять любые операции через API Java.

 13 июн. 2012 г., 15:08
... @ DavideAguiari Я не буду публично раскрывать ваше имя пользователя, хост и IP-адрес.
 Davide13 июн. 2012 г., 15:31
Не беспокойся. Пользователи фальшивые, а IP высоко защищен университетом.
 Davide13 июн. 2012 г., 11:14
Мы пробуем это решение. Подсказка: решение работает вручную: ssh [email protected] // & gt; введите пароль user_lab // psql -h golem -U ingsw12_03 ingsw12_03 // ingsw12_03 = & gt; (Доступ к серверу postresql в порядке) // Это Java-решение & quot ;:pastebin.com/QrM2UkHD  org.postgresql.util.PSQLException: сервер запросил аутентификацию на основе пароля, но пароль не был предоставлен. Строка изменения rhost = & quot; голем & quot; и urlAlfresco = & quot; jdbc: postgresql: // golem: & quot; + rport + & quot; / ingsw12_03 & quot ;; org.postgresql.util.PSQLException: не удалось установить соединение. Причина: java.net.UnknownHostException: golem Как решить? :(
 13 июн. 2012 г., 02:58
Удобно, похоже, что JSch также может туннелировать IP, поэтому они могут даже получить доступ к Pg через сеанс SSH, если прямой доступ отключен или отфильтрован.

Ваш ответ на вопрос