Вопрос по ssh, java, postgresql – Java + SSH + Postgres

2

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

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

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

Спасибо :) Davide

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

Ваш Ответ

3   ответа
1

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

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

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

ssh [email protected] ls
4

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

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

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

Нет также никакой реальной причины использовать этот подход только для разработки. Добавить опцию для вашего 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.
Вы также можете указать 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 на хосте пересылки для ограничения доступа к порту.
2

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

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

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

... @ DavideAguiari Я не буду публично раскрывать ваше имя пользователя, хост и IP-адрес.
Не беспокойся. Пользователи фальшивые, а IP высоко защищен университетом. Davide
Мы пробуем это решение. Подсказка: решение работает вручную: 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 Как решить? :( Davide
Удобно, похоже, что JSch также может туннелировать IP, поэтому они могут даже получить доступ к Pg через сеанс SSH, если прямой доступ отключен или отфильтрован.

Похожие вопросы