Pytanie w sprawie ssh, postgresql, java – Java + SSH + Postgres

2

Realizujemy projekt uniwersytecki: usługa łączenia samochodów w Javie.

Musimy rozwiązać problem związany z „zarządzaniem serwerem postgres”: baza danych PostgreSQL jest skonfigurowana na serwerze laboratoryjnym o nazwie „golem” (130.136.4.sth) dostępnym tylko przez terminale w tej samej podsieci (130.136.4.0). Mamy cztery konta (nasze), dzięki którym możemy ustanowić połączenie ssh z hostem.

Czy możliwe jest wykonanie zapytań SQL przez SSH w kierunku Postgres DB w JAVA?

Dziękuję :) Davide

@Brendan: Przepraszam, ale jeszcze niczego nie próbowaliśmy, ponieważ nie jesteśmy ekspertami od Java. Szukaliśmy więc wskazówek od ekspertów :) Może znaleziono wzór zweryfikowany zamiast złych rozwiązań. Davide
Popatrz na to. To nie jest pełna odpowiedź, ale myślę, że jest to jej część, przynajmniej połączenie SSH:example-code.com/java/ssh_exec.asp Valentin Vrinceanu
Co próbowałeś? .... poważnie ... Jestem związany z czytaniem pytań otwartych ... Brendan

Twoja odpowiedź

3   odpowiedź
4

możesz użyć przekierowania portu ssh, aby uzyskać dostęp do bazy danych tak, jakby była zainstalowana lokalnie. Sposób włączania przekierowania portów zależy od używanego oprogramowania klienckiego, na przykład openssh ma dla niego przełącznik linii poleceń (-L):

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

To polecenie sprawi, żeremoteport naremotehost, choć dostępne tylko przezhost, dostępne nalocalport w Twoim komputerze.

Możesz także powiedzieć ssh, aby nasłuchiwał na 0.0.0.0:localport zamiast domyślnego 127.0.0.1:localport, przekazując-g opcja (patrz strona podręcznika). NIE powinieneś tego robić, chyba że naprawdę tego potrzebujesz, ale jeśli tego potrzebujesz, to tam jest. Powoduje to wyświetlenie „remotehost: remoteport” przez „<host>: localport” doKAŻDY kto może skontaktować się z „<hostem>: yourport”, więc upewnij się, że „remotehost: remoteport” ma silną konfigurację zabezpieczeń i / lub użyj iptables na hoście przekazującym, aby ograniczyć dostęp do portu. Craig Ringer
Nie ma też prawdziwego powodu, aby używać tego podejścia tylko do rozwoju. Dodanie opcji dla aplikacji Java w celu utworzenia sesji SSH w celu tunelowania ruchu jest łatwe. ssh port forwardy są bardzo solidne, choć wydajność w warunkach przeciążenia może być trudnaponieważ tunelowanie TCP w TCP myli kontrolę przeciążenia TCP i algorytmy szybkości transmisji (http://sites.inka.de/bigred/devel/tcp-tcp.html). Jeśli nie chcesz odradzać procesu, [JSch obsługuje przekierowanie portów i tunelowanie IP za pośrednictwem natywnego Java ssh. Craig Ringer
2

ponieważ wydają się łatwiejsze do osiągnięcia tego, czego potrzebujesz.

Jeśli jednak naprawdę potrzebujesz zaimplementować przesyłanie poleceń za pomocą języka Java do przypisania do laboratorium, możesz przyjrzeć się znalezionej tutaj bibliotece JSch (Java Secure Channel):http://www.jcraft.com/jsch/ Przykłady są tutajhttp://www.jcraft.com/jsch/examples/

Dzięki niemu możesz przesyłać polecenia ssh i wykonywać dowolne operacje za pomocą API Java

... @ DavideAguiari Nie ujawniłbym publicznie Twojej nazwy użytkownika, hosta i adresu IP. kmarks2
Nie martw się. Użytkownicy są fałszywi, a IP ma wysoką zaporę ogniową na Uniwersytecie. Davide
Wygląda na to, że JSch może również tunelować IP, dzięki czemu mogą uzyskać dostęp do Pg poprzez sesję SSH, jeśli bezpośredni dostęp jest wyłączony lub filtrowany. Craig Ringer
Próbujemy tego rozwiązania. Wskazówka: Ręczne rozwiązanie działa: ssh [email protected] //> wprowadź hasło user_lab // psql -h golem -U ingsw12_03 ingsw12_03 // ingsw12_03 => (Uzyskaj dostęp do serwera postresql) // To jest rozwiązanie java „:pastebin.com/QrM2UkHD  org.postgresql.util.PSQLException: serwer zażądał uwierzytelnienia na podstawie hasła, ale nie podano hasła. Changing String rhost = "golem" i urlAlfresco = "jdbc: postgresql: // golem:" + rport + "/ ingsw12_03"; org.postgresql.util.PSQLException: Połączenie nie powiodło się Przyczyna: java.net.UnknownHostException: golem Jak rozwiązać? :( Davide
1

a następnie dowolne polecenie, które zostanie wykonane na zdalnym hoście. Więc powinieneś być w stanie uruchomić wstępnie spieczone zapytania w trybie wsadowym za pośrednictwem ssh.

Rozważ wykonanie wymiany klucza i klucza, aby włączyć wykonywanie ssh bez hasła.

Przykład (to tylko zrzuca listę katalogów do twojego terminala):

ssh [email protected] ls

Powiązane pytania