Bezpiecznie tuneluj port przez hosta pośredniego


23

Chcę skierować port VNC z powrotem do mojego domu tutaj. Muszę przeskoczyć nad jednym hostem, a następnie wskoczyć na moją maszynę roboczą.

  • sittinghere będzie moją lokalną maszyną domową
  • hopper na pośrednim skoku, który muszę zrobić
  • overthere będzie maszyną do pracy zdalnej

Mogę to zrobić SSH na mojej maszynie roboczej:

ssh -t hopper "ssh -t overthere"

Chciałbym użyć przekierowania portów do przekierowania zdalnego portu 5900 na overtherelokalny port 5900 włączony sittinghere. Wolałbym jednak móc to zrobić bez otwartego wiązania z portem, hopperponieważ każdy na tym komputerze byłby w stanie podłączyć się do mojego połączenia VNC.

Czy jest jakiś sposób, aby bezpiecznie przekierować ten port na mój komputer lokalny bez dostępu do niego hopper?


Z jakiego klienta VNC korzystasz?
slm

Odpowiedzi:


18

Używanie natywnej zdolności SSH do przekazywania portów. Od sittingherewykonania:

 ssh -v -N -L 5900:overthere:5900 user@hopper

Skieruj swojego klienta VNC na, localhost:5900a ruch będzie tunelowany overthere:5900przez ustanowione połączenie SSHhopper


1
AFAIK, to rozwiązanie nie pomoże ci, jeśli 5900 jest związany tylko z lokalnym interfejsem (127.0.0.1), tak jak dzieje się w tunelu hopper, a następnie hopperprzekazuje cały ruch do overthere:5900. Jeśli overthere:5900nasłuchuje na 0.0.0.0danym interfejsie lub dany interfejs, to zadziała, ale nie, jeśli nasłuchuje 127.0.0.1.
Naftuli Kay

18

Skończyło się na użyciu kilku ~/.ssh/confighacków SSH, aby tak się stało:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

Działa to wtedy, gdy próbuję się połączyć ssh overtherez sittinghere, łączy się, hoppera następnie łączy proxy SSH z portem 22 na overthere(tj. SSH włączony overthere).

Ma to niesamowite efekty uboczne:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

Wszystko działa świetnie i, o ile mogę stwierdzić, 5900 nie jest otwarty hopper, tylko przekazywany bezpośrednio z overtheredo sittinghere.


Nawiasem mówiąc, powinienem był o to zapytać w komentarzach wcześniej, ale rozwiązanie, na które wpadłeś, pochodzi bezpośrednio z podręcznika użytkownika x11nvc na stronie 8-). Przepraszamy, nie pomyślałem o zapytaniu, jakiego serwera VNC używasz.
slm

To mnie przeraża, ale zdecydowanie działa!
Dale Anderson

1
W niektórych dystrybucjach Linuksa (np. Ubuntu 14.04) netcat-openbsd jest instalowany domyślnie. W takim przypadku ten hack może nie działać. Aby rozwiązać ten problem, najpierw należy zainstalować netcat-traditional package ( apt-get install netcat-traditional -y). Następnie należy jednoznacznie określić nctyp w pliku konfiguracyjnym (zastępując ncz nc.traditional).
VeLKerr,

@Naftuli: Naprawdę niesamowite!
odszedł

1
@AlexanderPozdneev netcat .
taylorthurlow

1

Możesz przekierować port z sittingherena overthereport SSH przez hopper. Następnie możesz użyć tego portu, aby dotrzeć overtherebezpośrednio z sittinghere. W tej drugiej sesji SSH możesz przesłać VNC lub dowolne inne porty, które chcesz, podczas gdy hopperwidzisz tylko zaszyfrowaną sesję SSH.

Pierwsza sesja SSH:

ssh -f -N -L 7022:overthere:22 hopper

Teraz powiedz klienta SSH w jaki sposób można osiągnąć overtheredodając ten config ~/.ssh/confignasittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Druga sesja SSH:

ssh -f -N -L 5900:localhost:5900 overthere

Lub zwykła interaktywna sesja SSH bez tunelu portu VNC:

ssh overthere

Jeśli nie chcesz zawracać sobie głowy dodawaniem wierszy ~/.ssh/config, możesz powiedzieć mu, jak połączyć się overtherez wiersza poleceń:

ssh -p 7022 hopper

... ale bez HostKeyAliasSSH nie zweryfikuje overtherepoprawnie odcisku palca klucza.

Wszystkie wiersze poleceń należy uruchamiać sittinghere.

Nawiasem mówiąc, myślę, że chyba nie trzeba używać ssh„s -topcję.


1

Najpierw podłącz zasobnik, wykonując tunel między pracownikiem a komputerem domowym.

ssh -f ismail@hopper -L 2222:overthere:22 -N

następnie zrób ssh ro nad tunelem VNC

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

Teraz możesz połączyć się z VNC. Przy okazji zmień konfigurację vnc, aby słuchać localhost


0

Jeśli używasz klienta VNC vncviewerz wiersza poleceń, możesz użyć -viaprzełącznika, aby kazał mu przejść przez tunel user@hostprzed połączeniem z serwerem VNC innego hosta.

Przykład

$ vncviewer -via user@host localhost:0

Możesz także użyć vinagredo połączenia przez tunel SSH, podobnie jak poprzez GUI. Aby to zrobić, skonfiguruj swoje połączenie podobnie do tego w oknie dialogowym połączenia w vinagre:

              ss # 1

Co spowoduje, że połączenie zostanie nawiązane, tunelowane przez host tunelu SSH.

    ss # 2

Referencje


0

Następujące polecenie również powinno działać idealnie

ssh -f -N -J hopper overthere -L 5900:localhost:5900

Został przetestowany z dodatkowym parametrem do podłączenia serwera PostgreSQL na postgres-serverniestandardowym porcie ( -pprzełączniku), a także przy użyciu niestandardowej nazwy użytkownika.

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

Jak widać, rozwiązanie jest proste i nie wymaga żadnych zmian konfiguracji ssh ani żadnych pośrednich kroków.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.